为什么使用依赖注入_Spring Bean 的注入方式,你用的是哪一种?

 最近在研究大佬代码的时候,学到一种比较高大上的注入方式,今天我们就一起来看看

ce3f92f892300d08e30c9959c73b3a5b.png

众所周知 Spring Bean 的注入方式一般有三种:

1、构造器注入 

2、Setter注入 

3、基于注解的 @Autowired 自动装配(Field 注入)

其实在大部分人的开发过程中用的最多的应该都是 @Autowired 这种方式进行注入,因为这种方式比较简便,看起来也比较明了

但是官方是比较推荐我们使用 构造器 来进行注入,为什么不推荐我们使用自动装配的方法呢?

今天我们来看看对比一下这两种注入方式,看看到底该使用哪一种

01

@Autowired 注入

// Autowired注入public class Demo(){    @Autowired    private DemoTest demoTest;}
优点
  • 代码比较少,看起来简洁明了

  • 新增依赖十分方便,不需要修改原有代码

  • 注入简单,只需要使用 @Autowired 注解或者 @Resource 注解

缺点
  • 比较容易出现空指针异常,而且在编译时期是不会暴露出来,这就导致了空指针异常无法尽早的暴露出来

  • 对单元测试不友好,如果使用 Field 注入,那么进行单元测试就需要初始化整个Spring 环境,会将所有 Bean 实例化

  • 会出现循环依赖的隐患

  • // Autowired注入public class DemoTest(){    @Autowired    private Demo demo;}
  • // Autowired注入public class Demo(){    @Autowired    private DemoTest demoTest;}
  • 容易破坏单一职责原则

02

构造器注入

public class Demo(){ // 用 final 修饰,遵从依赖不可变原则  priavate final DemoTest demoTest;     public Demo(DemoTest demoTest){     this.demoTest = demoTest;   }}
优点
  • 解决了依赖循环的问题(spring 的三层缓存机制)

  • 强依赖处理,在编译阶段就能暴露出问题

  • 方便单元测试

  • 可以明确的指出依赖关系

缺点
  • 代码冗余,阅读不友好

    但是这个缺点,我们可以通过 Lombok 来进行解决,只需要在类上增加注解 @AllArgsConstructor

  • @AllArgsConstructorpublic class Demo(){ // 用 final 修饰,遵从依赖不可变原则  priavate final DemoTest demoTest;}
  • 相信看完上面的对比之后,你的心中已经有了选择。

40d0d6c6245f3181800195e20509f334.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值