bean的多个实例

时间:2012-03-30 22:07:03

标签: java spring listener

我正在实现一个监听器类,它监听一些事件然后处理它们。如果此事件的处理顺利,则此事件永远不会再次通知,但是在任何异常情况下,事件将在一段时间后再次通知MyBeanImplementation类,并且它可以再次尝试处理它。

以下代码工作正常,但由于此事件处理可能需要一些时间, 我想拥有多个听众。
2.限制服务呼叫的数量,可能正在使用线程池。

如何让多个侦听器以不同的方式处理每个事件?我是Spring的新手,如果这是可能的话,我也不知道。

Heres就是一个例子:

// Spring配置:

<bean id="MyBean" class="MyBeanImplementation">

//示例类

public class MyBeanImplementation implements EventListener {

    @override
    public processEvent(Event event) throws EventProcessFailureException {
        try {
            // Validate event
            validateEvent(event);
            // Call another service to store part of information from this event
            // This service takes some time to return success
            boolean success = makeCallToServiceAndStoreInfo(event);
            if(!success) {
                throw new EventProcessFailureException("Error storing event information!");
            }
        } catch (Exception e) {
            throw new EventProcessFailureException(e);
        }
    }

}


感谢

2 个答案:

答案 0 :(得分:0)

基本上,您可以使用Strategy pattern引入不同的侦听器,这些侦听器以不同的方式重新执行共享事件。

<bean id="strategy1Listener" />
<bean id="strategy2Listener" />
<bean id="strategy3Listener" />

然后,您可以引入复合侦听器来迭代其他侦听器并传递事件并允许它们处理事件:

<bean id="compositeStrategyListener">
  <property name="listeners">
    <list>
      <ref bean="strategy1Listener" />
      <ref bean="strategy2Listener" />
      <ref bean="strategy3Listener" />
    </list>
  </property>
</bean>

在故事的另一面,你有一个生成/发布事件的对象:

<bean id="eventGenerator">
  <property name="eventListener" ref="compositeStrategyListener" />
</bean>

所以,现在eventGenerator将生成的事件发布到compositeStrategyListner,它会迭代它拥有的侦听器,并允许它们以自己不同的方式处理事件。

您还可以利用Spring Task Execution来配置运行事件处理任务的方式。

答案 1 :(得分:0)

为什么不一起使用带有spring的google guava eventbus库?它将处理听取事件所需的所有事情。