SpringBoot中@Autowired爆红解决
SpringBoot中@Autowired爆红解决
问题背景
在controller层中使用 @Autowired注入dao(mapper)的时候,接口爆红
@Autowired
private EmployeeDao employeeDao;
问题分析
爆红提示:Could not autowire. No beans of 'EmployeeDao' type found.
解释:不能自动注入,无法找到EmployeeDao类型的bean
@Autowired是Spring的注解,找不到对应的bean对象,是因为没有把该EmployeeDao注入到Spring容器中。
问题解决
解决方法1
在需要使用@Autowired注入的类上添加@Repository注解即可,这个注解是Spring的注解,作用是把当前类注册到Srping容器中实例化为一个bean,这样的话@Autowired就可以找到这个bean了
爆红就会消失
解决方法2
将@Autowired注解替换成@Resource注解,该注解是JDK内部的注解,不会向@Autowired那样去Spring容器中寻找bean。
接口中并没有添加任何注解,爆红也会消失
总结
- 如果@Autowired导入的资源爆红需要在该资源的类方法上添加@Repository注解,否则需要使用@Resource注解
扩展
@Mapper注解:这是Mybatis中的注解,标注此类是一个Mapper,可以在每一个Mapper接口了上使用此注解
或者也在启动类上使用@MapperScan注解直接扫描整个或多个包,效果相同,二者选其一即可。