我正在用很多这样的语句来检查代码:
private SomeInterface x = Locator.getInstance(SomeInterface.class)
我希望有类似的东西
private SomeInterface x;
@Inject
public Consumer(SomeInterface x){ // constructor
this.x = x;
}
第一种方法有什么问题吗?好的,依赖性不是很明显,但是可以通过Locator的配置轻松地交换实现。
最佳答案
马丁·福勒(Martin Fowler)写下了article on DI versus Locators:
我个人认为第一个基于定位器的方法并没有什么本质上的坏处-我想DI确实对此进行了标准化,因此,如果可用,我会使用它。所有好的想法往往都会在某个时候最终成为框架,所以这就是这里发生的事情。加上DI,您可以利用其他注释,范围等,而无需滚动自己的代码。而且,您的项目使用的定制代码越少,IMO的性能就越好。我会把最后的话留给福勒: