【问题标题】:How to name and initialize a class of a service activator dynamically如何动态命名和初始化服务激活器的类
【发布时间】:2016-08-26 16:53:54
【问题描述】:

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

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

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

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

如果我可以在一个地方完成,我想节省编写 12 个频道和服务激活器的时间。

【问题讨论】:

    标签: spring-integration


    【解决方案1】:

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

    Spring Integration 具有如此灵活的所有这些组件和它们之间的通道的能力,这可能会导致人们误以为它是编程语言。当真正的语言是 Java 时,我们不应该忘记它的通用功能。

    尽管我们可以使用 SpEL 魔法通过 Spring Integration 实现您的愿望:

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

    【讨论】:

    • 我之前没有使用过serviceRegistry,你能指出我的相关资源,以便我可以为它放置正确的bean等吗?谢谢
    • 没有这样的。那只是假设的代码。如果那样的话,你应该写你自己的。而且,是的,你将无法绕过 Java :-)
    • 是的,在 java bean 类中完成了这项工作并且它正在工作。
    猜你喜欢
    • 2017-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多