基于注解的配置

以下来自示例仓库的示例展示了使用注解而非 XML 时可用的一些配置选项:

@EnableIntegration [id="CO1-1"]1
@IntegrationComponentScan [id="CO1-2"]2
@Configuration
public static class Config {

    @Value(${some.port})
    private int port;

    @MessagingGateway(defaultRequestChannel="toTcp") [id="CO1-3"]3
    public interface Gateway {

        String viaTcp(String in);

    }

    @Bean
    @ServiceActivator(inputChannel="toTcp") [id="CO1-4"]4
    public MessageHandler tcpOutGate(AbstractClientConnectionFactory connectionFactory) {
        TcpOutboundGateway gate = new TcpOutboundGateway();
        gate.setConnectionFactory(connectionFactory);
        gate.setOutputChannelName("resultToString");
        return gate;
    }

    @Bean [id="CO1-5"]5
    public TcpInboundGateway tcpInGate(AbstractServerConnectionFactory connectionFactory)  {
        TcpInboundGateway inGate = new TcpInboundGateway();
        inGate.setConnectionFactory(connectionFactory);
        inGate.setRequestChannel(fromTcp());
        return inGate;
    }

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

    @MessageEndpoint
    public static class Echo { [id="CO1-6"]6

        @Transformer(inputChannel="fromTcp", outputChannel="toEcho")
        public String convert(byte[] bytes) {
            return new String(bytes);
        }

        @ServiceActivator(inputChannel="toEcho")
        public String upCase(String in) {
            return in.toUpperCase();
        }

        @Transformer(inputChannel="resultToString")
        public String convertResult(byte[] bytes) {
            return new String(bytes);
        }

    }

    @Bean
    public AbstractClientConnectionFactory clientCF() { [id="CO1-7"]7
        return new TcpNetClientConnectionFactory("localhost", this.port);
    }

    @Bean
    public AbstractServerConnectionFactory serverCF() { [id="CO1-8"]8
        return new TcpNetServerConnectionFactory(this.port);
    }

}
 <1>  标准的 Spring Integration 注解,用于启用集成应用程序的基础设施。
 <1>  搜索 `@MessagingGateway` 接口。
 <1>  流客户端的入口点。
调用应用程序可以使用 `@Autowired` 注入此 `Gateway` bean 并调用其方法。
 <1>  出站端点由 `MessageHandler` 和一个包装它的消费者组成。
在此场景中,`@ServiceActivator` 根据通道类型配置端点。
 <1>  入站端点(在 TCP/UDP 模块中)都是消息驱动的,因此只需要声明为简单的 `@Bean` 实例。
 <1>  此类别提供了许多 POJO 方法,用于此示例流(服务器端的 `@Transformer` 和 `@ServiceActivator`,以及客户端的 `@Transformer`)。
 <1>  客户端连接工厂。
 <1>  服务器端连接工厂。