Spring--依赖注入的三种方式//学习笔记

Spring 中的三种依赖注入方式

1.2.Field Injection

@Autowired注解使用的一大场景就是Field Injection

这种注入方式通过Java的反射机制实现,所以private的成员也可以被注入具体的对象

 2.Constructor Injection

Constructor Injection是构造器注入,是我们日常最为推荐的一种使用方式

 这种注入方式很直接,通过对象构建的时候建立关系,所以这种方式对象创建的顺序会有要求,当然Spring会为你设定先后顺序,除非你出现了循环依赖,然后就会抛出异常

3.Setter Injecction

Setter Injection也会用到@Autowried注解,但使用方式不同与Feild Injection,

Field Injection是用在成员变量上,而Setter Injection是使用在成员变量的Sette函数上

 

三种依赖注入方式对比

1.)可靠性:由于构造函数有严格的构建顺序和不可变性,一旦构建就可用,且不会被更改

2.) 可维护性:还是由于依赖关系的明确,从构造函数中可以分析出依赖关系,对于我们如何去读懂关系和维护关系更友好

3.)可测试性:当在复杂依赖关系的情况下考察程序是否更容易编写单元测试来评判,Constructor Injection 和Setter Injection的方式更容易mock和注入对象,所以更容易实现单元测试

4.)灵活性:主要根据开发实现时候的编码灵活性来判断,由于Constructor Injection对Bean的依赖关系设计有严格的顺序要求,所以这种注入 方式不太灵活。相反Field Injection和Setter Injection就非常灵活,但是也因为灵活带来了局面的混乱,是一把双刃剑

5.)循环关系的检测

对于Bean之间是否存在循环依赖关系的检测能力,只有Constructor Injection是自动检测的

6.)性能表现:主要影响的就是启动时间,由于Constructor Injection有严格的顺序要求,所以会拉长启动时间

结果一目了然,Constructor Injection在很多方面都是优于其他两种方式的,所以Constructor Injection 通常是首选方案

其他两者,如果要用@Autowried,推荐使用Setter Injection 的方式,这样IDEA也就不会有黄线,发出警告了。

总结:1.依赖注入的使用上,Constructor Injection是首选

            2.@Autowired注解,使用Setter Injection方式,这样代码更容易编写单元测试

注:学习自公众号【程序猿DD】

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值