我想要使用替換xml配置Java /註釋基於一個簡單的tcp服務器與Spring集成(版本4.0.6)。 我使用@MessageEndpoint按如下方式工作。問題是,由於某些原因,使用@MessageEndpoint註解的類必須是靜態的。我無法注入bean,因爲這樣做有用。 據我所知,應該可以使用@ServiceActivator而不使用@MessageEndpoint,但我無法弄清楚。@ServiceActivator沒有@MessageEndpoint在Spring集成註釋配置
這是我現在所擁有的。在評論中你可以看到我想要替換的xml部分。
@Configuration
@EnableIntegration
public class TcpServerContextConfiguration {
// <int-ip:tcp-connection-factory id="crLfServer"
// type="server"
// port="5678"
// single-use="true"
// so-timeout="10000"/>
@Bean
TcpNetServerConnectionFactory crLfServer() {
TcpNetServerConnectionFactory factory = new TcpNetServerConnectionFactory(5678);
factory.setSingleUse(true);
factory.setSoTimeout(10000);
return factory;
}
// <int-ip:tcp-inbound-gateway id="gatewayCrLf"
// connection-factory="crLfServer"
// request-channel="serverBytes2StringChannel"/>
@Bean
public TcpInboundGateway gatewayCrLf() {
TcpInboundGateway gateway = new TcpInboundGateway();
gateway.setConnectionFactory(crLfServer());
gateway.setRequestChannel(serverBytes2StringChannel());
return gateway;
}
@Bean
public MessageChannel serverBytes2StringChannel() {
return new DirectChannel();
}
// <int:channel id="toSA" />
@Bean
public MessageChannel toSA() {
return new DirectChannel();
}
// <int:service-activator input-channel="toSA"
// ref="echoService"
// method="test"/>
//
// <bean id="echoService"
// class="com.posera.www.poseraStats.site.EchoService" />
@MessageEndpoint
public static class Echo {
@ServiceActivator(inputChannel="toSA")
public String echoService(String req) {
return "echo:" + req;
}
}
// <int:object-to-string-transformer id="serverBytes2String"
// input-channel="serverBytes2StringChannel"
// output-channel="toSA"/>
@Bean
@Transformer(inputChannel="serverBytes2StringChannel", outputChannel="toSA")
public org.springframework.integration.transformer.Transformer serverBytes2String() {
return new ObjectToStringTransformer();
}
}
所以我試圖用@MessageEndpoint下面的代碼,但它失敗:
@ServiceActivator(inputChannel="toSA")
public String echoService(String req) {
return "echo:" + req;
}
我想我在尋找應該是這樣的答案:
@Bean
@ServiceActivator(inputChannel="toSA")
public MessageHandler newEchoService() {
}
但我我不知道在這個時候我需要使用哪個MessageHandler接口實現輸入通道,它是String。
在此先感謝。
嗨加里,非常感謝這麼快速的回答。我有一種感覺,你會回答它:) – Yerke
添加'@ MessageEndpoint'到TcpServerContextConfiguration幫助。非常感謝。但是爲了我將來的理解:如問題中所述,是否有一種方法可以使用不帶'@ MessageEndpoint'的'@ ServiceActivator'? – Yerke
正如我所說的,從@ 4.3開始不再需要'@ MessageEndpoint'。在此之前,它是POJO'@ ServiceActivator'所必需的; '@ServiceActivator'的@ Bean風格必須是'MessageHandler'類型。要使用這種風格,你應該繼承'AbstractReplyProducingMessageHandler'並實現'handleRequestMessage()'。輸出通道需要在處理程序中指定,而不是在@ @ ServiceActivator中指定。有兩個bean,消費者端點和處理程序。請參閱[文檔](http://docs.spring.io/spring-integration/reference/html/configuration.html#annotations_on_beans)。 –