Service Activator重用不起作用

时间:2017-02-07 11:06:31

标签: spring-integration

在服务激活器文档中,它说:

  

使用"参考"如果自定义Service Activator处理程序实现可以在其他定义中重用,则通常建议使用该属性。

但下面的代码片段给了我

  

IllegalArgumentException:AbstractReplyProducingMessageHandler只能被引用一次

<bean id="groupResequencer" class="com.core.flow.GroupResequencer"/>
<int:service-activator id="groupResequencer1" ref="groupResequencer"/>
<int:service-activator id="groupResequencer2" ref="groupResequencer"/>

当我将bean定义更改为原型时,它可以工作,但onInit()方法被调用两次,一次使用通用组件名称,第二次使用spring integration service activator id作为组件名称。

对我而言,bean是单身还是原型并不重要,但我需要一个只发生一次的干净创作。

1 个答案:

答案 0 :(得分:0)

我们需要改进该文档 - 它仅适用于ref引用POJO的情况。

前段时间,我们为服务激活器添加了一个优化,如果ref bean是AbstractReplyProducingMessageHandler,我们直接引用它而不是将它包装在新的处理程序中,以避免这种开销。

由于这样的bean只能有一个outputChannel,我们无法在多个端点中使用它。使其成为原型意味着每个服务激活器都有自己的实例。

如果将bean更改为POJO而不是从ARPMH扩展,则可以以这种方式重用它。