Java 如何共享有状态bean?
我在独立环境上使用Spring3.1 我有一个场景,我正在创建编程原型bean 每个bean都有自己的状态。(它们是有状态的,具有唯一的id等等) 创建bean之后,我将它连接到一个主题(实际上是通过DLMC) 发送到主题的每条消息都包含一个特定的id(主题的使用者之一) 延迟和吞吐量对我来说非常重要 所以,如果我向一个特定的bean发送大量的消息,我会在每条消息之间产生荒谬的延迟,因为这个bean非常忙,并且在完成当前任务之前它不会空闲 所以我认为每次我第一次创建同一个bean时,我都需要创建它的池来避免这种情况 有什么办法可以做到吗?也许有一个高层次的解决方案 我以务实的方式创建这些spring MDB: java代码:Java 如何共享有状态bean?,java,spring,threadpool,connection-pooling,Java,Spring,Threadpool,Connection Pooling,我在独立环境上使用Spring3.1 我有一个场景,我正在创建编程原型bean 每个bean都有自己的状态。(它们是有状态的,具有唯一的id等等) 创建bean之后,我将它连接到一个主题(实际上是通过DLMC) 发送到主题的每条消息都包含一个特定的id(主题的使用者之一) 延迟和吞吐量对我来说非常重要 所以,如果我向一个特定的bean发送大量的消息,我会在每条消息之间产生荒谬的延迟,因为这个bean非常忙,并且在完成当前任务之前它不会空闲 所以我认为每次我第一次创建同一个bean时,我都需要创建
MyMdb myMdb= (MyMdb) beanFactory.getBean("MyMdb", id);
和xml:
<bean id="fixSessionMDB" class="com.finbird.fixgw.core.mdb.FixSessionMDB"
scope="prototype" lazy-init="true">
<constructor-arg ref="0" />
<constructor-arg ref="0" />
</bean>
您没有提供太多的实现细节,但请查看以下代码片段:
<bean id="uniqueConsumerTarget" scope="prototype" lazy-init="true"/>
<bean id="uniqueConsumer" class="org.springframework.aop.framework.ProxyFactoryBean">
<property name="targetSource">
<bean class="org.springframework.aop.target.CommonsPoolTargetSource">
<property name="targetClass" value="com.example.UniqueConsumer"/>
<property name="targetBeanName" value="uniqueConsumerTarget"/>
<property name="maxSize" value="10"/>
<property name="maxWait" value="5000"/>
</bean>
</property>
</bean>
这个代码非常聪明。每次您请求“uniqueConsumer”
bean时,Spring实际上会返回一些动态代理,用于拦截所有调用。一旦您尝试在该bean上执行任何方法,Spring将从池中获取一个实例(或创建一个新实例)并转发给它
“maxSize”
和“maxWait”
参数是自描述性的,用于微调池。问题在于,我是以实用的方式创建这个原型bean的。我已经修改了我的问题。