Widget oPooledWidget = (Widget)oObjectPool.borrowObject();
Widget oInjectedWidget = oAppContext.getBeans("widget");
Widget oFactoryWidget = oWidgetFactory.createWidget();
在没有new
运算符和构造函数的情况下实例化类有很多不同的方法,我正在寻找通常接受的用例/场景,以便何时选择其中一个。
显然,在某些情况下集合对象是不合适的,例如当你不知道池有多大时,或者你知道池会很大的时候。
但是什么 是一个需要合并的适当场景?集合何时提供优先于依赖注入或工厂类的好处?
同样,何时想要选择使用工厂类而不是依赖注入,反之亦然?
答案 0 :(得分:2)
依赖注入来自代码拥有大量工厂的时代。因此,DI是工厂的一个方便的替代品。您可以将DI上下文称为通用工厂。此外,对象池可以是在DI上下文中定义的bean。尽管对象池实现了应用程序代码必须使用的接口,以保持池的一致性。与DI上下文bean相比,从池中检索的对象具有不同的生命周期:
pool = appContext.getBean("connectionPool");
conn = pool.get();
try {
// .. do stuff
} finally {
conn.close();
// or
pool.release(conn);
}