我见过很多以下类型的代码:
private final Map<String, String> map;
public SomeConstructor() {
this.map = new HashMap<String, String>();
}
可以通过将 map 作为参数传递给 SomeConstructor 轻松替换此类代码。扩展我的问题,在某些情况下依赖注入不是正确的做法,而是使用构造函数进行初始化?
我见过很多以下类型的代码:
private final Map<String, String> map;
public SomeConstructor() {
this.map = new HashMap<String, String>();
}
可以通过将 map 作为参数传递给 SomeConstructor 轻松替换此类代码。扩展我的问题,在某些情况下依赖注入不是正确的做法,而是使用构造函数进行初始化?
如果您可能想注入不同类型的参数,请使用依赖注入,这不仅仅是内部细节。在像这样的简单情况下,另一个类可能不想注入 map 的类型——这是一个内部细节。但是,对于像数据库服务这样的东西,您可能希望注入不同的类型(以及用于测试的存根)。
考虑一个单元测试。
SomeClass c = new SomeClass(new HashMap(), new HashMap(),
new HashMap(), new ArrayList());
比
SomeClass c = new SomeClass();
如果您永远无法预见任何人会提供不同的实现,那真的没有意义。
考虑
SomeClass {
List list = new ArrayList();
}
如果您注入它,则可以通过 aLinkedList
代替,我想这是一个胜利 - 没有其他代码被修改。但是,实现SomeClass
不会因此而改变的可能性有多大?
简而言之,我想说