依赖注入vs全局工厂

时间:2011-10-18 13:56:16

标签: spring language-agnostic

为什么人们默认使用DI而不是使用将接口/摘要映射到类的散列图的全局工厂?这似乎是解决问题的更高性能解决方案吗?

此线程中到目前为止提到的所有内容都可以由全局工厂提供,其方法如下:

TestGlobalFactory implements GlobalFactoryI
ProductionGlobalFactory implements GlobalFactoryI //configures classes to interfaces

protected GlobalFactoryI gf=GlobalFactoryFactory.getInstance(); //only singleton used in app, specifies which GlobalFactory to use

protected SportsCarI mySportsCar=gf.new("sportsCarI",constructorVar1,constructorVar2);

以上将比递归反射检测DI实例快得多。

然而,我确实更喜欢DI的惯例,因为它最终会减少角色,并且可以选择第三方容器。

artima.com/forums/flat.jsp?forum=106&thread=238700

无论DI,它是优越的方法,因为它编写了容器来指定哪个实现属于哪个类。使用服务定位器,实际上必须执行gf.new(“thisClass”,“sportsCarI”,constructor1)

2 个答案:

答案 0 :(得分:3)

依赖注入相对于基于工厂的方法的主要优势不是性能。它的主要优点是可测试性。 DI的重点是能够注入模拟依赖项来实现组件的单元测试。在工厂工作会更加痛苦。

答案 1 :(得分:0)

因为你在Spring中获得了更多。除了根据用户指定的bean范围(例如原型,单例等)缓存实例外,Spring还管理其bean的生命周期。另请注意,Spring的DI与其“控制反转”有关,所以事情不会直接硬编码到应用程序中(除非您考虑配置代码)。