当我使用spring docs中描述的配置时:
@Configuration
@EnableIntegration
public class MyFlowConfiguration {
@Bean
@InboundChannelAdapter(value = "inputChannel", poller = @Poller(fixedDelay = "1000"))
public MessageSource<String> consoleSource() {
return CharacterStreamReadingMessageSource.stdin();
}
@Bean
@Transformer(inputChannel = "inputChannel", outputChannel = "httpChannel")
public ObjectToMapTransformer toMapTransformer() {
return new ObjectToMapTransformer();
}
@Bean
@ServiceActivator(inputChannel = "httpChannel")
public MessageHandler httpHandler() {
HttpRequestExecutingMessageHandler handler = new HttpRequestExecutingMessageHandler("http://foo/service");
handler.setExpectedResponseType(String.class);
handler.setOutputChannelName("outputChannel");
return handler;
}
@Bean
@ServiceActivator(inputChannel = "outputChannel")
public LoggingHandler loggingHandler() {
return new LoggingHandler("info");
}
}
我可以使用什么样的bean定义名称来到达 endpoints ?通过组件使用配置时,文档中提供了以下信息:
这些注释的处理创建相同的bean(AbstractEndpoints和MessageHandlers(或入站通道适配器的MessageSources - 见下文),与类似的xml组件一样 . 使用以下模式生成bean名称:[componentName] . [methodName] . [对于AbstractEndpoint,decapitalizedAnnotationClassShortName]和具有MessageHandler(MessageSource)bean的附加.handler(.source)后缀的相同名称.SessageHandlers(MessageSources)也有资格被第8.2节“消息历史记录”跟踪 .
但是如何在这里使用它?
1 回答
如果我理解正确,您希望 inject 某些 endpoints 适用于您的服务 . 不确定"why?",但它可以这样做(例如为
httpHandler
):根据上述规则:
myFlowConfiguration
- 包含@ServiceActivator
方法的类的bean名称 . 在你的情况下,这是你的@Configuration
httpHandler
方法名称包含@ServiceActivator
serviceActivator
-@ServiceActivator
的资本化名称 .明白了吗 ?
UPDATE
好的,谢谢 . 这是一个答案 . 任何
@Import
@Configuration
都带有包含完全限定类名的bean名称,包括package(来自ConfigurationClassPostProcessor
):因此,如果我们要使用来自那些
unnamed
类的 endpoints 的引用,我们必须记住这一点 .当然,为了简化您的生活,您只需在
MyFlowConfiguration
中添加name
: