构造函数注入和 Setter 依赖注入

简介: 【8月更文挑战第22天】

构造函数注入和 Setter 依赖注入都是向类提供依赖关系的常用方法。它们各有优缺点,在不同的情况下可能更合适。

构造函数注入

构造函数注入涉及在创建类实例时通过构造函数传递依赖关系。

public class MyClass {
   

    private MyDependency dependency;

    public MyClass(MyDependency dependency) {
   
        this.dependency = dependency;
    }

    // ...
}

优点:

  • 显式依赖关系:构造函数注入使依赖关系显式,很容易看到哪些类依赖于哪些其他类。
  • 不可变性:一旦实例化,通过构造函数注入的依赖关系是不可变的。这有助于确保对象的不可变性。
  • 测试方便:通过构造函数注入依赖关系,可以轻松地在测试中模拟或替换依赖关系。

缺点:

  • 构造函数臃肿:随着依赖关系数量的增加,构造函数可能会变得臃肿和难以维护。
  • 不可变依赖关系:在某些情况下,可能需要在对象的生命周期内更改依赖关系。构造函数注入不允许这样做。

Setter 依赖注入

Setter 依赖注入涉及在实例化类之后使用 setter 方法设置依赖关系。

public class MyClass {
   

    private MyDependency dependency;

    public void setDependency(MyDependency dependency) {
   
        this.dependency = dependency;
    }

    // ...
}

优点:

  • 灵活性:Setter 依赖注入允许在对象的生命周期内更改依赖关系。
  • 构造函数简洁:使用 Setter 依赖注入,构造函数可以保持简洁,只包含必需的参数。
  • 延迟初始化:依赖关系可以根据需要延迟初始化,这在某些情况下可能是有利的。

缺点:

  • 隐式依赖关系:Setter 依赖注入使依赖关系更隐式,更难识别哪些类依赖于哪些其他类。
  • 潜在错误:如果忘记设置依赖关系,可能会导致运行时错误。
  • 测试困难:在测试中模拟或替换通过 Setter 依赖注入的依赖关系可能更困难。

哪种方法更好?

选择构造函数注入还是 Setter 依赖注入取决于具体情况。以下是一些一般准则:

  • 如果需要不可变的依赖关系或显式的依赖关系,则使用构造函数注入。
  • 如果需要灵活性或延迟初始化,则使用 Setter 依赖注入。
  • 如果构造函数的参数数量较多,则考虑使用 Setter 依赖注入以保持构造函数简洁。

结论

构造函数注入和 Setter 依赖注入都是向类提供依赖关系的有效方法。根据具体要求和偏好,选择最合适的方法至关重要。

目录
相关文章
|
2月前
|
Java Spring 容器
DI之 setter方法注入
属性setter方法注入是Spring框架中最常用的依赖注入方式。通过在类中定义setter方法,Spring容器可以通过这些方法为对象属性赋值。示例中创建了User2实体类,并在Spring配置文件中设置了id、name和pwd属性的值,最后通过测试类输出User2对象信息。
42 3
|
前端开发 Java C++
Bean的作用域
Bean 常见的 6 种作用域
怎么看注解对应的处理类?
怎么看注解对应的处理类?
82 0
|
Kotlin
aop注解在整个类生效
aop注解在整个类生效
81 0
SpringBoot静态属性赋值:@Value注入静态属性
SpringBoot静态属性赋值:@Value注入静态属性
285 0
|
XML Java 数据格式
一文了解Bean的作用域
了解Bean的作用域
165 0
|
设计模式
依赖注入和构造器注入的区别
依赖注入和构造器注入的区别
|
Java 容器 Spring
构造器注入
构造器注入
|
监控
aop实现对方法参数的获取
aop实现对方法参数的获取
135 0