Widget oPooledWidget = (Widget)oObjectPool.borrowObject();
Widget oInjectedWidget = oAppContext.getBeans("widget");
Widget oFactoryWidget = oWidgetFactory.createWidget();
有许多不同的方法可以在没有 new
运算符和构造函数的情况下实例化类,我正在寻找普遍接受的用例/场景,以了解何时选择其中一种。
显然,在某些情况下不适合对对象进行池化,例如当您不知道池可以有多大,或者当您知道池会很大时。
但是什么才是需要池化的合适场景?池化什么时候比依赖注入(inject)或工厂类更有优势?
同样,什么时候人们会选择使用工厂类而不是依赖注入(inject),反之亦然?
最佳答案
依赖注入(inject)来自代码拥有无数工厂的时代。因此,DI 是工厂的便捷替代品。您可以将 DI 上下文称为通用工厂。此外,对象池可以是在 DI 上下文中定义的 bean。尽管对象池实现了应用程序代码必须使用的接口(interface),以保持池的一致性。与 DI 上下文 bean 相比,从池中检索的对象具有不同的生命周期:
pool = appContext.getBean("connectionPool");
conn = pool.get();
try {
// .. do stuff
} finally {
conn.close();
// or
pool.release(conn);
}
关于java - 对象池、IoC 和工厂 : When and Where?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7500325/