0

我见过几个倾向于使用方法注入的框架,例如:

public abstract class MyClass {
    /** Create the class here */
    protected abstract Prototype createPrototype();

    public void doSomething() {
        createPrototype().foo();
    }
    public void doSomethingElse() {
        createPrototype().bar();
    }
}

他们可能会使用匿名内部类来添加自定义功能/创建您喜欢的对象:

   new MyClass() {
      createPrototype() {
        return prototype;
      }
   }

然后是其他支持构造函数注入的,例如 guice。

与构造函数注入相比有优势吗,使用方法注入是一种好习惯吗?

4

1 回答 1

1

在一些罕见的情况下,基于构造函数的依赖注入是不可能的,但是我认为通常认为使用基于构造函数而不是方法的 DI 更好,因为这样你的对象就会在一切准备就绪的情况下进行初始化,如果有什么是如果缺少,那么您可以在对象构造中一口气抓住它。此外,您通常不想在设置依赖项后弄乱它们,因此为它们投入大量的设置器会在某种程度上破坏封装。如果你永远不想使用它,那么拥有一个 setter 有什么意义呢?

于 2013-09-25T14:36:36.953 回答