在服务激活器文档中,它说:
使用"参考"如果自定义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是单身还是原型并不重要,但我需要一个只发生一次的干净创作。
答案 0 :(得分:0)
我们需要改进该文档 - 它仅适用于ref
引用POJO的情况。
前段时间,我们为服务激活器添加了一个优化,如果ref bean是AbstractReplyProducingMessageHandler
,我们直接引用它而不是将它包装在新的处理程序中,以避免这种开销。
由于这样的bean只能有一个outputChannel
,我们无法在多个端点中使用它。使其成为原型意味着每个服务激活器都有自己的实例。
如果将bean更改为POJO而不是从ARPMH扩展,则可以以这种方式重用它。