为什么人们默认使用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)
答案 0 :(得分:3)
依赖注入相对于基于工厂的方法的主要优势不是性能。它的主要优点是可测试性。 DI的重点是能够注入模拟依赖项来实现组件的单元测试。在工厂工作会更加痛苦。
答案 1 :(得分:0)
因为你在Spring中获得了更多。除了根据用户指定的bean范围(例如原型,单例等)缓存实例外,Spring还管理其bean的生命周期。另请注意,Spring的DI与其“控制反转”有关,所以事情不会直接硬编码到应用程序中(除非您考虑配置代码)。