2

我见过很多以下类型的代码:

   private final Map<String, String> map;

    public SomeConstructor() {
      this.map = new HashMap<String, String>();
    }

可以通过将 map 作为参数传递给 SomeConstructor 轻松替换此类代码。扩展我的问题,在某些情况下依赖注入不是正确的做法,而是使用构造函数进行初始化?

4

2 回答 2

4

如果您可能想注入不同类型的参数,请使用依赖注入,这不仅仅是内部细节。在像这样的简单情况下,另一个类可能不想注入 map 的类型——这是一个内部细节。但是,对于像数据库服务这样的东西,您可能希望注入不同的类型(以及用于测试的存根)。

于 2013-10-30T00:50:49.370 回答
3

考虑一个单元测试。

SomeClass c = new SomeClass(new HashMap(), new HashMap(), 
    new HashMap(), new ArrayList());

SomeClass c = new SomeClass();

如果您永远无法预见任何人会提供不同的实现,那真的没有意义。

考虑

SomeClass {
  List list = new ArrayList();
}

如果您注入它,则可以通过 aLinkedList代替,我想这是一个胜利 - 没有其他代码被修改。但是,实现SomeClass不会因此而改变的可能性有多大?

简而言之,我想说

  • 依赖注入更容易编写,更难阅读,更难调试
  • 不要用于琐碎的东西
于 2013-10-30T00:53:56.390 回答