Java学习笔记

SpringMVC启动报错:org.springframewor

2021-12-21  本文已影响0人  想象之中丶意料之外

此问题排查点:

  1. spring配置文件中,<context:component-scan base-package> 能正常扫描到被注入进来的类【即:userService类需要被Spring容器管理】
  2. 确认:@Autowired注解、@Service注解是 springframework中的注解,别使用错误了。
  3. 确认:@Service注解,是使用在 Service接口实现类上【即@Service注解应该注解在UserServiceImpl类上,不是userService接口上】
  4. 确认:UserService接口是否有多个实现类,如果存在多个实现类,@Service注解需要取别名【@Service("别名")】,然后 注入userService时,需要使用@Qualifier("别名")来指定被注入的实现类是哪个。

上述排查点,排查后还是不行,那么按照下面方式,尝试一下

  1. 先确保UserService实现类中【UserServiceImpl】,没有注入其他类,比如UserDao类。
  2. 在确保UserService实现类中没有注入其他类后,尝试再次启动,看报不报错。
  3. 报错:上述点没排查干净。不报错:找到原因,UserService实现类中注入其他类失败导致。
原因
比如
//  controller类
public class UserController {
    // 注入 userService类
    @Autowired
    private UserService userService;
}


// UserService实现类
@Service
public class UserServiceImpl implements UserService {
    // 注入  UserDao类
    @Autowired
    private UserDao userDao;
}

补充UserDao接口不可用排查点:

  1. @Repository注解使用是否正确,即是否使用springframework的注解
  2. org.mybatis.spring.mapper.MapperScannerConfigurer类中,配置basePackage多个包时,UserDao接口是否存在重复。如果存在,可以使用@Repository("别名") 方法解决。
  3. 配置basePackage包路径时,当前UserDao接口是否能被包含在内,即确认是否能被扫描到。
  4. 确认:pom中加入了 spring-aop对aspectJ框架支持。即:spring-aspects 依赖,注意依赖版本与Spring框架版本是否存在不一致。
  5. 说明:Dao接口不能被注入,一般要确认其代理实现类是否有被创建,如果没有创建,那么就会无效。
使用 getBeanDefinitionNames方法,查看Spring容器中在管理哪些类
        ApplicationContext context = new ClassPathXmlApplicationContext("spring/spring.xml");
        String[] names = context.getBeanDefinitionNames();
        for (String name : names) {
            System.out.println("Spring管理的类:" + name);
        }
上一篇 下一篇

猜你喜欢

热点阅读