如何将Spring Integration XML重构为注释支持?

时间:2014-04-16 10:46:57

标签: java xml spring spring-integration

我试图将现有的Spring Integration xml重构为新的4.0.0.注释。

<!-- the service activator is bound to the tcp input gateways error channel -->
<ip:tcp-inbound-gateway error-channel="errorChannel" />
<int:service-activator input-channel="errorChannel" ref="myService" />

但是如何将服务激活器绑定到错误通道,就像它在xml中一样?

@Configuration
@EnableIntegration
public class Config {

    @Bean
    public TcpInboundGateway gate() {
        TcpInboundGateway gateway = new TcpInboundGateway();

        //??? how can I bind the service activator class as it was in xml?
        gateway.setErrorChannel(MessageChannel);
        return gateway;
    }
}


@Service
public class MyService {

    @ServiceActivator(inputChannel = "errorChannel")
    public String send(String data) {
        //business logic
    }
}

1 个答案:

答案 0 :(得分:7)

好吧,既然我是那些新的Java和Annotation配置功能的作者,我可以帮助你。

但你应该做好准备,这样做并不容易。要完全摆脱xml,你可以选择我们的另一个新东西 - Java DSL

我告诉我们,我们将采取几个步骤使其发挥作用。

gateway.setErrorChannel(MessageChannel);@ServiceActivator(inputChannel = "errorChannel")。您必须将errorChannel声明为bean:

@Bean
public MessageChannel errorChannel() {
   return new DirectChannel();
}

从TCP网关使用它:

gateway.setErrorChannel(this.errorChannel());

或者,如果您依赖于框架中的默认errorChannel,则应@Autowired将其Config。{/ p>

下一步。我没有看到@ComponentScan。这意味着您的@ServiceActivator可能在应用程序上下文中不可见。

您应该为TcpInboundGateway提供更多选项:connectionFactoryrequestChannelreplyChannel等。一切都必须是春豆。

一开始就足够了。希望它清楚,对你有意义。