idea下springboot工程 @Autowired注解属性报红编译不通过及部分相关问题的解决办法

最近使用idea在搭建一个springboot工程,在service层获取dao层接口实例的时候,使用@Autowired注解XXXMapper 编译不通过。

先上我的问题解决方法,对于运行正常的工程:

  • 方法1:idea-Settings-Editor-Inspections-spring core-code-Autowiring for bean class -Severity修改选择为Warning;
    idea下springboot工程 @Autowired注解属性报红编译不通过及部分相关问题的解决办法_第1张图片
  • 方法2:如果该注解的属性可以为null,设置@Autowired的required=false。因为这个默认是true,即为空就报错。idea下springboot工程 @Autowired注解属性报红编译不通过及部分相关问题的解决办法_第2张图片
  • 方法3:替换@Autowired为@Resource;用@Resource替换就是类似方法2原理,@Resource与其效果一样,都是获取实例,但是编译期默认可以为null。idea下springboot工程 @Autowired注解属性报红编译不通过及部分相关问题的解决办法_第3张图片
    这3个方法对我运行正常的工程有效;

另外,查到部分相关问题的解决方法,其实都是围绕这个注解原理查看配置是否完整。
原理

  • 在springboot 启动创建bean时,会对@Autowired注解的属性进行注入,即需要有相关bean注入。
    所以检查:
    • 1.对于XXXmapper需要配置扫描,@MapperScan(“xxx.xxx.mapper”)这里填写工程的mapper文件的包路径。不扫描,怎么知道东西在哪?就不能产生相应的bean。idea下springboot工程 @Autowired注解属性报红编译不通过及部分相关问题的解决办法_第4张图片
    • 2.或者在自定义配置的java类中配置扫描路径。
  • @Autowired默认是基于类型获取bean,有多个实现实例的时候就根据名称获取bean,如果注解的父类IUserService类型有多个子类UserServiceImpl01/UserServiceImpl02,那么该类的实例就有两个,这个时候需要指定类型,否则找不到唯一的类。比如我要01的,那么可以这样:
    • private IUserService userServiceImpl01;定义变量名称为子类类型,当然首字母小写。
    • 只想要private IUserService userServiceImpl怎么办?在该属性上面添加@Qualifier(“userServiceImpl01”)。

你可能感兴趣的:(mybatis,问题记录,注解)