抽象类和接口的依赖注入

时间:2018-08-06 19:42:27

标签: spring dependency-injection

我们可以像下面给出的代码那样,将抽象类和接口属性的依赖项注入到所需的类中吗?

abstract class Parent { }

interface Heritage { }

class Child
{
    @Autowired private Parent parent;
    @Autowired private Heritage heritage;
}

1 个答案:

答案 0 :(得分:0)

使用“属性注入”(又称“ Setter注入”)或字段注入来防止依赖项的注入。这些做法导致了Temporal Coupling。相反,您应该只使用构造函数注入作为DI的实践,因为:

  • 构造函数可以保证提供所有依赖项,从而防止时间耦合
  • 构造函数静态声明类的依赖项
  • 允许创建类的实例,而无需任何工具(例如DI容器)来构造该类型
  • 当一个组件只有一个构造函数时(这是一种很好的做法),它避免了使用任何特定于框架的特殊属性(例如@Autowired)标记该类的需求。

使用构造函数注入时,该类将如下所示:

class Child
{
    private Parent parent;
    private Heritage heritage;

    public Child(Parent parent, Heritage heritage) {
        if (parent == null) throw new NullErrorException();
        if (heritage == null) throw new NullErrorException();

        this.parent = parent;
        this.heritage = heritage;
    }
}