为什么不建议使用 @Autowired 注解进行注入
2024-09-18 17:12:57
在Spring中,Bean的注入一般有三种方式:属性注入、set方法注入、构造器注入。
1、Autowired注入的原理
@Autowired属于属性注入,默认按照类型装配,默认情况下要求依赖的对象必须存在,不过可以通过@Autowired(required = false)
来解决这一问题
2、Autowired存在的问题
2.1 不能使用final修饰符
在使用Autowired修饰属性之后,这一属性我们就不能再用final修饰符修饰了,但是一个好的软件设计是希望我们在合适的地方尽可能使用final的,除非变量必须是可变的。因此@Autowired
注解的使用条件就显然与这一原则相违背了。
2.2 破坏了单一职责原则
虽然使用属性注入很方便,这也造成了引入依赖过多时不够明显,因为添加一个属性不需要太多额外的代码。 假设我需要添加六个、十个甚至十几个依赖项,使用属性注入,我们很少关心是否违反了SRP原则。 反之用构造器注入代码很快就会显得十分庞大,有太多的依赖通常意味着这个类有太多的职责。 这时候应该考虑一下此组件是不是违反了单一职责原则。
2.3 与依赖注入容器紧密耦合
使用基于字段的注入函数的话是为了避免大规模的使用getter和setter方法,这也就间接导致我们除了Spring容器外没有其他的生成对象的方法,使得我们在test类中也必须大规模使用Spring容器来处理。
3、对应的解决方案
使用@Resource
注解
最新文章
- begin
- SQL Server 数据库镜像
- Genymotion 解决虚拟镜像下载速度特别慢的问题
- 利用 PortableBasemapServer 发布地图服务
- maven之ubutu安装
- Ubuntu15.04 安装Android开发环境
- Nginx之负载均衡
- java 读取文件到String(解决中文乱码)
- D-Separation(D分离)
- 【APP问题定位(一)】夜神模拟器安装及问题
- react native 项目版本升级
- 复习java基础
- guxh的python笔记五:面向对象
- Deploy Descriptor
- 小强学渲染之OpenGL状态机理解
- ethereum &; ETC
- 每日英语:The Delicate Protocol Of Hugging
- JavaScript模块化-RequireJs实现AMD规范的简单例子
- python学习笔记——multiprocessing 多进程模块Process
- Android Looper详解