Spring integration 服务激活器重用不起作用

Spring integration 服务激活器重用不起作用,spring-integration,Spring Integration,service activator文档中指出: 如果自定义服务激活器处理程序实现可以在其他定义中重用,则通常建议使用“ref”属性 但下面的片段给了我 IllegalArgumentException:AbstractReplyProducingMessageHandler只能被引用一次 当我将bean定义更改为prototype时,它可以工作,但是onInit()方法会被调用两次,一次使用通用组件名,第二次使用spring integration service activator id作

service activator文档中指出:

如果自定义服务激活器处理程序实现可以在其他定义中重用,则通常建议使用“ref”属性

但下面的片段给了我

IllegalArgumentException:AbstractReplyProducingMessageHandler只能被引用一次


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


bean是单例还是原型对我来说并不重要,但我需要一个只发生一次的干净创建。

我们需要改进该文档-它只适用于
ref
引用POJO时

不久前,我们向ServiceActivator添加了一个优化,这样,如果refbean是一个
AbstractReplyProducingMessageHandler
,我们就直接引用它,而不是将它包装到一个新的处理程序中,以避免这种开销

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


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

感谢您的澄清!
<bean id="groupResequencer" class="com.core.flow.GroupResequencer"/>
<int:service-activator id="groupResequencer1" ref="groupResequencer"/>
<int:service-activator id="groupResequencer2" ref="groupResequencer"/>