当我使用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定义名称来访问端点? 通过组件使用配置时,在文档中提供了信息:
这些注释的处理创建相同的bean(AbstractEndpoints和MessageHandlers(或入站通道适配器的MessageSources - 见下文),与类似的xml组件一样。使用以下模式生成bean名称:[componentName]。[methodName] 。[AbstractapndizedClassShortName]用于AbstractEndpoint,同名,带有一个额外的.handler(.source)后缀用于MessageHandler(MessageSource)bean。MessageHandlers(MessageSources)也有资格被第8.2节“消息历史记录”跟踪。 / p>
但是如何在这里使用它?
答案 0 :(得分:4)
如果我理解正确,您希望注入其中一些端点到您的服务中。不确定&#34;为什么?&#34;,但可以这样做(例如httpHandler
):
@Autowire
@Qualifier("myFlowConfiguration.httpHandler.serviceActivator")
private AbstractEndpoint httpEndpoint;
根据上述规则:
myFlowConfiguration
- 包含@ServiceActivator
方法的类的bean名称。在您的情况下,这是您的@Configuration
httpHandler
方法名称为@ServiceActivator
serviceActivator
- @ServiceActivator
的资本化名称。
这是清楚的吗?
<强>更新强>
我没有使用xml上下文,只使用基于java的配置,所以答案是
@Import
好,谢谢。这是一个答案。任何@Import
@Configuration
都带有包含完整限定类名的bean名称,包括package(来自ConfigurationClassPostProcessor
):
/* using fully qualified class names as default bean names */
private BeanNameGenerator importBeanNameGenerator = new AnnotationBeanNameGenerator() {
@Override
protected String buildDefaultBeanName(BeanDefinition definition) {
return definition.getBeanClassName();
}
};
因此,如果我们要使用那些unnamed
类的端点引用,我们必须记住这一点。
当然,为了简化您的生活,您只需向name
添加MyFlowConfiguration
:
@Configuration("myFlowConfiguration")
@EnableIntegration
public class MyFlowConfiguration {