关于@Autowired的三种用法
@Autowired在IDEA的警告
在使用spring框架时,我们使用@Autowired实现依赖注入时,IDEA经常会出现警告不建议使用字段注入
,要弄懂这个警告,我们得了解@Autowired注入的方式,和他们的各自的优缺点。
@Autowired三种用法
字段注入
字段注入是最常用的@Autowired注入方法,就是在要注入的组件上直接注解@Autowired;
1 |
|
优点:
- 字段注入十分简单,要修改时,修改的代码很少;
缺点:
- 不能使用final关键字,可能会导致空安全(空指针)问题,因为注入后的属性,只有真正使用时才能拿到。如果一开始注入的是null,可能会因为一直不调用而导致无法发现NullPointException存在;
- 和IoC高度耦合,无法重新设置注入的属性,无法脱离容器访问目标对象
- 可能导致循环依赖(A依赖B,B依赖A)
构造器注入
构造器注入是spring官方推荐的注入方法,写法就是将原来要注入的对象,在构造函数处作为参数注入;
1 |
|
优点:
- 可以使用final关键字,避免了空安全(空指针)问题。(final修饰的属性必须一开始设置属性,或者在执行构造函数建立时就赋值,保证属性不为空)
- 可以避免循环依赖的问题(使用构造器注入时,出现了循环依赖,启动Spring时会检测循环关系在控制台直观的表现出来)
- 可以明确成员变量注入的顺序
缺点:
- 当要注入的依赖特别多时,构造器会变得特别臃肿
- 要增删依赖注入时,比较麻烦(要同时修改成员变量和构造函数)
set方法注入
setter方法注入通过set方法来注入依赖,经常用于依赖选择性注入
1 |
|
优点:
- 可以在类构造后,重新注入依赖
- 可以选择性注入(只有设置了setter方法的属性会被注入
- 十分灵活,容易编写代码
缺点:
- 可能会导致循环依赖(spring不检测set注入的循环关系
- 不能使用final,可能会导致空安全
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Gallifrey的计算机学习日记!
评论