首页 技术 正文
技术 2022年11月6日
0 收藏 540 点赞 386 浏览 785 个字

使用IntelliJ IDEA进行开发的时候,code analyze的时候会出现提示“Field injection is not recommended”。

stackoverflow上有篇回答:http://stackoverflow.com/questions/39890849/what-exactly-is-field-injection-and-how-to-avoid-it

国外有篇文章:http://vojtechruzicka.com/field-dependency-injection-considered-harmful/

spring官方文档:http://docs.spring.io/spring/docs/4.2.x/spring-framework-reference/html/beans.html

依赖注入方式:

1、通过构造方法

2、通过setters或者其它方法

3、通过反射直接注入到fields

一般的@Autowired就是通过第三种方式

注入的指导方针:

1、为了强制依赖,或者为了易变性,使用构造方法注入

2、为了可选的或者可变的依赖,使用setter注入

3、尽量避免使用直接在属性上注入

属性注入的坏处:

1、你不能使用属性注入的方式构建不可变对象。

2、你的类和依赖容器强耦合,不能再容器外使用。

3、你的类不能绕过反射(例如单元测试的时候)进行实例化,必须通过依赖容器才能实例化,这更像是集成测试。

4、实际的依赖被隐藏在外面,不是在构造方法或者其它方法里面反射的。

5、一个类经常会有超过10个的依赖。如果使用构造方法的方式注入的话,构造方法会有10个参数,明显有点蠢。但是如果使用属性注入的话就没有这样的限制。但是一个类有很多的依赖,是一个危险的标志,因为很有可能这个类完成了超过一件事,违背了单一职责原则。

总结:

尽量避免使用属性注入,虽然非常方便。

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,026
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,517
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,364
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,145
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,779
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,856