是否有任何不应用依赖注入的情况?

时间:2013-10-30 00:49:01

标签: java constructor dependency-injection

我见过以下类型的代码:

   private final Map<String, String> map;

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

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

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:3)

想想单元测试。

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

更烦人
SomeClass c = new SomeClass();

如果你无法预见任何提供不同实现的人,那就没有意义了。

考虑

SomeClass {
  List list = new ArrayList();
}

如果你注入了它,可以传递一个LinkedList,我想这是一个胜利 - 没有其他代码被修改。但是SomeClass的实施有可能不会因此而改变?

简而言之,我会说

  • 依赖注入更容易编写,更难阅读,更难调试
  • 不要用于琐碎的东西