具有注释的Spring-Integration Simple Bridge

时间:2017-02-01 12:16:38

标签: spring-integration

如何定义一个简单的桥接器,它只是通过java注释从一个directChannel桥接到另一个;

在xml中可以这样做(取自http://docs.spring.io/spring-integration/reference/html/messaging-channels-section.html

<int:bridge input-channel="input" output-channel="output"/>
带注释的

我希望这个定义看起来像这个

@Bean
@BridgeFrom("inboundChannel")
@BridgeTo("outboundChannel")
public MessageChannel bridge() {
    return new DirectChannel();
}

但这给了我错误

IllegalArgumentException: '@BridgeFrom' is eligible only for 'MessageChannel' '@Bean' methods

有关如何将上述xml-definition转换为java-config-definition的任何建议?

2 个答案:

答案 0 :(得分:3)

应该是

@Bean
@BridgeTo("output")
public MessageChannel input() {
    return new DirectChannel();
}

@Bean
@BridgeFrom("input")
public MessageChannel output() {
    return new DirectChannel();
}

你的解决方案没问题,但效率稍差。

修改

如果你想要桥接两个通道,你无法控制的配置,或者你想以不同的方式在“库”配置之间架起桥梁,这是你所拥有的更有效的版本... < / p>

@Bean
@ServiceActivator(inputChannel="inboundChannel")
public MessageHandler bridge() {
    BridgeHandler handler = new BridgeHandler();
    handler.setOutputChannelName("outboundChannel");
    return handler;
}

请注意,输出通道位于处理程序上,而不是服务激活器注释。有关此配置样式,请参阅here

答案 1 :(得分:0)

我找到了一个使用@ServiceActivator的解决方法,但我不确定它是否100%等效。

@ServiceActivator(inputChannel = "inboundChannel", outputChannel = "outboundChannel")
public Message<?> bridge(Message<?> m) {
    return m;
}