【发布时间】:2014-04-04 12:48:47
【问题描述】:
我想以编程方式创建以下 XML 配置
<int:channel id="sample">
</int:channel>
我能做的是以下
PublishSubscribeChannel channel = new PublishSubscribeChannel();
但是没有分配id的方法。
【问题讨论】:
我想以编程方式创建以下 XML 配置
<int:channel id="sample">
</int:channel>
我能做的是以下
PublishSubscribeChannel channel = new PublishSubscribeChannel();
但是没有分配id的方法。
【问题讨论】:
实际上<int:channel> 产生DirectChannel bean。
如果您想以编程方式完成并拥有整个消息传递基础架构,则无论如何都应该将其配置为 bean:
@Configuration
public class MyConfiguration {
@Bean
public MessageChannel sample() {
return new DirectChannel();
}
}
id 属性是 Spring IOC 容器的一个关键特性,当然,它不是具体类的责任。
在我看来你应该看看Spring Integration 4.0的新东西。
【讨论】:
“id”特定于 Spring 应用程序上下文,有助于识别在应用程序上下文中定义的每个实例。
您在其中的内容更“详细”地转换为这个 Spring 配置:
<bean id="sample" class="org.springframework.integration.channel.DirectChannel" />
“id”像名称一样标识 Spring ApplicationContext 上下文中的类 DirectChannel 实例。用于“int:channel”定义的默认频道是 DirectChannel 类,而不是 PublishSubscribeChannel (DirectChannel)。
但是,除了通道本身之外,Spring Integration 在后台创建了一些其他 bean。
【讨论】:
另一种连接/注入DirectChannel Bean 的方式:对于Spring 3.2.3.RELEASE 版本
Controller/Config Loader 文件中的代码:
@Configuration
public class ConfigControllerLoader {
@Autowired
@Qualifier("direct-channel-bean")
DirectChannel drtChannel;
}
上下文文件bean定义:
<int:channel id="direct-channel-bean"></int:channel>
【讨论】: