我正在使用Spring Framework和DefaultMessageListenerContainer并发地从JMS队列中消费消息。我希望能够为每个进来的消息创建自动装配的bean的新实例。我尝试过将scope="prototype",但似乎无法实现我的要求。请问是否有一种自定义的bean作用域,能够类似于HTTP请求中的“request”作用域,为每个JMS消息创建新的实例?
我知道可以让com.sample.TestListener实现BeanFactoryAware接口,然后在onMessage方法中调用getBean("foo")来获取实例,但我想避免将Spring依赖放入我的代码中。
以下是示例代码,我希望每次有消息进来时都能创建"com.sample.Foo"及其注入的所有bean的新实例。
我知道可以让com.sample.TestListener实现BeanFactoryAware接口,然后在onMessage方法中调用getBean("foo")来获取实例,但我想避免将Spring依赖放入我的代码中。
以下是示例代码,我希望每次有消息进来时都能创建"com.sample.Foo"及其注入的所有bean的新实例。
<bean id="consumer"
class="com.sample.TestListener">
<constructor-arg ref="foo" />
</bean>
<!--Configures the Spring Message Listen Container. Points to the Connection
Factory, Destination, and Consumer -->
<bean id="MessageListenerContainer"
class="org.springframework.jms.listener.DefaultMessageListenerContainer">
<property name="connectionFactory" ref="CachedConnectionFactory" />
<property name="destination" ref="Topic" />
<property name="messageListener" ref="consumer" />
<property name="concurrency" value="10"/>
</bean>
<bean id="foo" class="com.sample.Foo">
<property name="x" ref="xx" />
<property name="y" ref="yy" />
<property name="z" ref="zz" />
</bean>
prototype
不起作用,以及为什么你想要每个JMS消息一个单独的bean。 - VB_