アノテーションベースの構成

サンプルリポジトリの次の例は、XML の代わりにアノテーションを使用する場合に使用できる構成オプションの一部を示しています。

@EnableIntegration (1)
@IntegrationComponentScan (2)
@Configuration
public static class Config {

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

    @MessagingGateway(defaultRequestChannel="toTcp") (3)
    public interface Gateway {

        String viaTcp(String in);

    }

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

    @Bean (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 { (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() { (7)
        return new TcpNetClientConnectionFactory("localhost", this.port);
    }

    @Bean
    public AbstractServerConnectionFactory serverCF() { (8)
        return new TcpNetServerConnectionFactory(this.port);
    }

}
1 統合アプリケーションのインフラストラクチャーを可能にする標準 Spring Integration アノテーション。
2@MessagingGateway インターフェースを検索します。
3 フローのクライアント側へのエントリポイント。呼び出し側アプリケーションは、この Gateway Bean に @Autowired を使用し、そのメソッドを呼び出すことができます。
4 送信エンドポイントは、MessageHandler とそれをラップするコンシューマーで構成されます。このシナリオでは、@ServiceActivator はチャネル型に応じてエンドポイントを構成します。
5(TCP/UDP モジュールの)受信エンドポイントはすべてメッセージ駆動型であるため、単純な @Bean インスタンスとしてのみ宣言する必要があります。
6 このクラスは、このサンプルフローで使用する多くの POJO メソッドを提供します(サーバー側の @Transformer および @ServiceActivator、クライアント側の @Transformer)。
7 クライアント側の接続ファクトリ。
8 サーバー側の接続ファクトリ。