@Autowired注⼊Mapper接⼝时报红⾊下划线警告
@Autowired ⾃动注⼊,⾸先要求被⾃动注⼊的类必须在spring容器中注册为bean,,也就是该类必须为@Controller、@Service、
@Repository、@Component等注解注释,⽽springboot-mybatis框架中,我们的持久化层为mybatis的Mapper接⼝层,⼀般的我们会在接⼝层上加注@Mapper注解,⽽@Mapper和@MapperScan并不是spring框架的注解,所以springboot框架使⽤@Autowired⾃动注⼊mapper接⼝层时,便会报红⾊警告,表⽰可能注⼊失败。
接下来我们讨论如何消除这样的警告:
1、(建议)使⽤@Resource代替@Autowired注解,根据类型注⼊改为根据名称注⼊;
2、(不建议)将注解@Autowired 改为(@Autowired(required = false)),表⽰注⼊时,⾃动注⼊的类为⾮必须;
(不建议)3、Setting -> Inspections -> 搜索spring bean,到Spring Bean Autowired,把红⾊(Error)修改为黄⾊(Warning);
强烈建议第⼀种,因为第⼆种⽅式修改的范围太⼴,⽽且代码也不是很美观,第三中则完全清除了⾃动注⼊失败的错误警告,对⼀些正常的注⼊失败的警告信息也进⾏了覆盖,不利于错误排查。
@Autowired 与 @Resource注解的区别:
@Autowired注解来源于spring框架,@Resource注解来源于JSR-250规范;resource和autowired注解的区别
@Autowired只按照byType 注⼊;@Resource默认按byName⾃动注⼊;
@Autowired按类型装配依赖对象,默认情况下它要求依赖对象必须存在,如果允许null值,可以设置它required属性为false。如果我们想使⽤按名称装配,可以结合@Qualifier注解⼀起使⽤。@Resource有两个中重要的属性:name和type。name属性指定byName,如果没有指定name属性,当注解标注在字段上,即默认取字段的名称作为bean名称寻依赖对象。需要注意的是,@Resource如果没有指定name属性,并且按照默认的名称仍然不到依赖对象时, @Resource注解会回退到按类型装配。但⼀旦指定了name属性,就只能按名称装配了。
还有⼀种:在Mapper接⼝上⾯加⼊⼀个Spring的注解:@Component
解释:@component (把普通pojo实例化到spring容器中,相当于配置⽂件中的),就是为了把Spring扫描不到的mapper接⼝给⾃动加⼊Spring容器中
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论