我见过以下类型的代码:
private final Map<String, String> map;
public SomeConstructor() {
this.map = new HashMap<String, String>();
}
通过将map作为参数传递给SomeConstructor,可以轻松替换此类代码。 扩展我的问题,在某些情况下,使用构造函数初始化依赖注入不是正确的做法吗?
答案 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
的实施有可能不会因此而改变?
简而言之,我会说