【955、Spring 构造器注入和set注入有什么区别】

36 阅读2分钟

在 Spring 中,你可以使用构造器注入和属性(setter)注入来将依赖项注入到 bean 中。它们之间的主要区别在于注入的方式和用途:

  1. 构造器注入

    • 注入方式:通过构造函数来注入依赖项。
    • 用途:通常用于注入必须的依赖项,即在创建对象时必须满足的依赖项。构造器注入可以强制要求 bean 必须拥有这些依赖项。

    例子:

    public class MyClass {
        private MyDependency dependency;
    
        public MyClass(MyDependency dependency) {
            this.dependency = dependency;
        }
    }
    
  2. 属性(Setter)注入

    • 注入方式:通过 setter 方法来注入依赖项。
    • 用途:通常用于注入可选的依赖项,或者在对象创建后随时更改依赖项。它允许 bean 在不拥有依赖项的情况下创建,然后通过 setter 方法设置依赖项。

    例子:

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

一些要考虑的因素:

  • 构造器注入的不变性:如果一个依赖项是必需的,且在对象创建后不应更改,构造器注入是一个好的选择。这可以确保 bean 在创建时具有一致的状态。
  • 属性注入的灵活性:如果依赖项是可选的,或者可以在对象创建后更改,属性注入是更灵活的选项。
  • 组合注入:你也可以将构造器注入和属性注入结合使用,以实现更复杂的依赖关系。

总之,构造器注入和属性注入各有其用途,你可以根据依赖项的性质和对象的需求来选择合适的注入方式。一般来说,如果一个依赖项是强制的,最好使用构造器注入,而如果一个依赖项是可选的或需要动态更改,可以使用属性注入。