引言
今天在写代码时发现注入的时候有个警告 , Field injection is not recommend
看一下别的地方 , 也都是报了警告
当然也可能会出现这种情况,报红显示无法注入
难道大家平时不是这么用的吗 ?
难道这样做不对吗?
用了这么久居然发现这样用不对,毁三观有木有!!!
那么究竟是什么原因spring
不推荐我们这样使用
为什面试经常问依赖注入的方式呢
为什么面试经常问spring
中对象的生命周期呢
spring 的三种注入方式
- 接口注入
也就是我们最常用的注入方式 , 然而这种注入方式现在已经不提倡了,基本处于退役状态
- 构造方法注入
这种注入方式的有点就是 , 对象在实例化好后就可以马上使用 , 缺点是如果字段过多, 构造方法冗长无比
- setter方法注入
解决
报警告的我们可以这样解决
使用setter
注入
private MBrokerGroupMapper brokerGroupMapper;
@Autowired
public void setBrokerGroupMapper(MBrokerGroupMapper brokerGroupMapper) {
this.brokerGroupMapper = brokerGroupMapper;
}
那么报红无法注入的问题呢?
实际上这两种你直接运行,一般也是能直接运行的.
看多很多人的解决方案都是调idea 的警告级别,这不是自欺欺人吗
但是没有强迫症的coder
不是好架构师
-
设置@Autowired(required=false) 即不使用强制注入,使用选择注入
-
代码级别忽略这个检查
-
使用java 自己的
@Resource
注解代替spring 的
我们在注入的地方设置忽略报错即可
关于@SuppressWarnings
的参数大家可以参阅其他,比较常见的几个比如unchecked
,all
,unused
…
阅读源码的过程大家可以看到这个注解非常常见
api级别的就不赘述了
总结
这个问题实际上是对spring
依赖注入的理解,其核心理念便是解耦