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

目录
相关文章
|
5月前
|
Java Spring 容器
DI之 setter方法注入
属性setter方法注入是Spring框架中最常用的依赖注入方式。通过在类中定义setter方法,Spring容器可以通过这些方法为对象属性赋值。示例中创建了User2实体类,并在Spring配置文件中设置了id、name和pwd属性的值,最后通过测试类输出User2对象信息。
80 3
|
前端开发 Java C++
Bean的作用域
Bean 常见的 6 种作用域
怎么看注解对应的处理类?
怎么看注解对应的处理类?
116 0
获取类中所有的bean
获取类中所有的bean
72 0
SpringBoot静态属性赋值:@Value注入静态属性
SpringBoot静态属性赋值:@Value注入静态属性
299 0
|
Java 容器 Spring
七.Spring源码剖析-Bean的实例化-属性注入
喜欢我的文章的话就给个好评吧,你的肯定是我坚持写作最大的动力,来吧兄弟们,给我一点动力 这一章节我们来讨论创建Bean过程中的属性注入,在Spring的IOC容器启动过程中,会把定义的Bean封装成BeanDefinition注册到一个ConcurrentHashMap中,Bean注册完成后,就会对单利的且lazy-init=false 的Bean进行实例化。创建Bean的代码在 AbstractAutowireCapableBeanFactory#doCreateBean 中,当Bean创建成功之后,会调用AbstractAutowireCapableBeanFactory#populat
|
XML Java 数据格式
一文了解Bean的作用域
了解Bean的作用域
193 0
|
设计模式
依赖注入和构造器注入的区别
依赖注入和构造器注入的区别
|
Java 容器 Spring
构造器注入
构造器注入
|
缓存 Java 开发者
Spring源码(八)-构造方法实例化Bean-createBeanInstance
各位小伙伴好,这是 Spring 源码系列的第八篇文章。本篇篇幅较长(五千八百字),建议收藏慢慢品尝。
707 1
下一篇
oss创建bucket
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等