如何动态命名和初始化一个服务激活器类

时间:2016-08-26 16:53:55

标签: spring-integration

这是我之前的问题How to set payload as constructor-arg value in service-activator的后续行动。

我们有12个不同的类,如AProcessor,Bprocessor等等。每个构造函数接受公共有效负载并在其中执行相同的声明方法'发布'。

现在,我想在SI中使用单个公共通道和服务激活器来处理这个问题,但是我怎么能动态地将类名放在表达式中,我可以从payload.type派生出来。

我正在尝试类似下面的内容,但它不起作用

  

< service-activator input-channel =" COMMON_PUBLISH_CHANNEL"表达式="'新的mypackage。' + payload.type +' RequestProcessor'(payload.myservice).publish(payload.data)">   < /服务活化剂>

如果我可以在一个地方做,我想节省写12个频道和服务激活器。

1 个答案:

答案 0 :(得分:0)

我建议将这样的逻辑移到Java类中,但仍然有一个<service-activator>。决定调用哪个目标处理器的所有艰苦工作都应该在服务方法中完成。

Spring集成的功能非常灵活,它们之间的所有组件和通道可能会导致误导它是编程语言。当真正的语言是Java时,我们不应该忘记它的通用功能。

虽然我们可以使用SpEL魔术实现Spring Integration的愿望:

<chain>
   <header-enricher name="service" expression="@serviceRegistry[payload.type]"/>
   <service-activator expression="headers[service].process(payload)"/>
<chain>