弹簧接口注入示例

到目前为止,还没有人能够在Spring Framework中提供接口注入的正确示例。

马丁·福勒的文章不是为凡人准备的,其他一切都只是以一种非常混乱的方式定位的词语。我已经浏览了三十多篇文章,人们要么说“Spring不直接支持接口注入”(“因为我不知道如何描述setter和构造函数注入”),要么“我将在我的其他线程中讨论它”,要么下面几乎没有评论说它是错误的例子。我不要求解释,例如我乞求。

有三种类型的注入:构造函数、Setter 和接口。春天不直接支持最新的(正如我观察到人们所说的那样)。那么它究竟是如何完成的呢?

谢谢


答案 1

根据春季DI的变体

DI有两个主要变体,基于构造函数的依赖注入和基于Setter的依赖注入。

另请参阅接口注入未在春季实现,明确指出。

因此,DI 只有两种变体。因此,如果文档对接口注入一无所知,那么很明显它不存在。那些认为接口注入是通过在接口中提供 setter 方法的人回答我:

  1. 为什么春季参考文档没有提到接口注入?
  2. 为什么不能通过提供 setter 方法进行接口注射,而不将其视为 setter 注射本身。当接口的引入不影响任何东西时,为什么要为此创建特殊术语,我的意思是它仍然以相同的方式配置。如果它们不同,那么如何通过查看配置找到它。在配置中看不到实际配置的类实现某些接口的 impl,这难道不应该是透明的吗?
  3. 就像使用实例工厂方法的实例化和使用静态工厂方法的实例化一样,一些Bean属性应该阐明接口注入吗?

答案 2

通过接口注入,接口显式定义了可以设置依赖关系的点:

interface InjectPerson {
    public void injectHere(Person p);
}

class Company implements InjectPerson {
   Person injectedPerson; 

   public void injectHere(Person p) {
        this.injectedPerson = p;
    }
}