java - 对象池、IoC 和工厂 : When and Where?

标签 java design-patterns dependency-injection factory-pattern pool

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/

相关文章:

java.lang.IllegalArgumentException : Illegal character in scheme at index 0: localhost 异常

java - 通过在一个集合中进行更改来反射(reflect)多个 mongodb 集合中的更改

java - 概述/了解 Eclipse 中的体系结构代码

java - 如果我在实现工厂模式时使用抽象类而不是接口(interface)。还会是工厂模式吗?

java - Spring 将 Clock 作为构造函数参数注入(inject)时出现问题

java - 我的 Google Guice 方法拦截器不执行,但为什么?

java - 在 Android 中测试时使用不同的 `google-services.json`

java - Sonar jacoco报告未执行

java - 如何替换字符串中的括号

c# - 当两个实例必须共享一个第三个实例时,我应该使用依赖注入(inject)吗?