gpt4 book ai didi

java - 如何使用 Pooled Spring beans 而不是 Singleton 的?

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:54:53 25 4
gpt4 key购买 nike

出于效率原因,我有兴趣限制同时使用 Spring 应用程序上下文的 bean 的线程数量(我不希望在我的 中处理无限 数量的线程有限的内存)。

我找到了 here (spring 文档)一种通过执行以下操作以 EJB 样式汇集 bean 来实现此目的的方法:

  • 将目标 bean 声明为范围“原型(prototype)”。
  • 声明一个 Pool 提供程序,它将提供有限数量的池化“目标”实例。
  • 声明一个我不清楚其功能的“ProxyFactoryBean”。

这是这个 bean 的声明:

<bean id="businessObjectTarget" class="com.mycompany.MyBusinessObject" 
scope="prototype">
... properties omitted
</bean>

<bean id="poolTargetSource" class="org.springframework.aop.target.CommonsPoolTargetSource">
<property name="targetBeanName" value="businessObjectTarget"/>
<property name="maxSize" value="25"/>
</bean>

<bean id="businessObject" class="org.springframework.aop.framework.ProxyFactoryBean">
<property name="targetSource" ref="poolTargetSource"/>
<property name="interceptorNames" value="myInterceptor"/>
</bean>

我的问题是,当我将声明另一个 bean 以使用“businessObjectTarget”的池化实例时,我应该怎么做?我的意思是,当我尝试做这样的事情时:

<bean id="clientBean" class="com.mycompany.ClientOfTheBusinessObject">
<property name="businessObject" ref="WHAT TO PUT HERE???"/>
</bean>

“ref”的值应该是多少??

最佳答案

您不能使用属性来获取原型(prototype)的实例。
一种选择是使用查找方法(参见 chapter 3.3.7.1)
在代码中获取 bean 的另一种选择:使 com.mycompany.ClientOfTheBusinessObject 实现 ApplicationContextAware 接口(interface),然后调用 context.getBean("clientBean")

关于java - 如何使用 Pooled Spring beans 而不是 Singleton 的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6493583/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com