您的位置:首页 > 编程语言 > Java开发

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

2020-06-08 04:55 1561 查看

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

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

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

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

  • 在springboot 启动创建bean时,会对@Autowired注解的属性进行注入,即需要有相关bean注入。
    所以检查: 1.对于XXXmapper需要配置扫描,@MapperScan(“xxx.xxx.mapper”)这里填写工程的mapper文件的包路径。不扫描,怎么知道东西在哪?就不能产生相应的bean。
  • 2.或者在自定义配置的java类中配置扫描路径。
  • @Autowired默认是基于类型获取bean,有多个实现实例的时候就根据名称获取bean,如果注解的父类IUserService类型有多个子类UserServiceImpl01/UserServiceImpl02,那么该类的实例就有两个,这个时候需要指定类型,否则找不到唯一的类。比如我要01的,那么可以这样:
      private IUserService userServiceImpl01;定义变量名称为子类类型,当然首字母小写。
    • 只想要private IUserService userServiceImpl怎么办?在该属性上面添加@Qualifier(“userServiceImpl01”)。
  • 内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
    标签: 
    相关文章推荐