【问题标题】:How to create programmatically a spring PublishSubscribeChannel如何以编程方式创建弹簧 PublishSubscribeChannel
【发布时间】:2014-04-04 12:48:47
【问题描述】:

我想以编程方式创建以下 XML 配置

<int:channel id="sample">
</int:channel>

我能做的是以下

PublishSubscribeChannel channel = new PublishSubscribeChannel();

但是没有分配id的方法。

【问题讨论】:

    标签: spring spring-integration


    【解决方案1】:

    实际上&lt;int:channel&gt; 产生DirectChannel bean。

    如果您想以编程方式完成并拥有整个消息传递基础架构,则无论如何都应该将其配置为 bean:

    @Configuration
    public class MyConfiguration {
    
       @Bean
       public MessageChannel sample() {
           return new DirectChannel();
       }
    
    }
    

    id 属性是 Spring IOC 容器的一个关键特性,当然,它不是具体类的责任。

    在我看来你应该看看Spring Integration 4.0的新东西。

    【讨论】:

      【解决方案2】:

      “id”特定于 Spring 应用程序上下文,有助于识别在应用程序上下文中定义的每个实例。

      您在其中的内容更“详细”地转换为这个 Spring 配置:

      <bean id="sample" class="org.springframework.integration.channel.DirectChannel" />
      

      “id”像名称一样标识 Spring ApplicationContext 上下文中的类 DirectChannel 实例。用于“int:channel”定义的默认频道是 DirectChannel 类,而不是 PublishSubscribeChannel (DirectChannel)。

      但是,除了通道本身之外,Spring Integration 在后台创建了一些其他 bean。

      【讨论】:

        【解决方案3】:

        另一种连接/注入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>
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-08-01
          • 1970-01-01
          • 1970-01-01
          • 2019-06-25
          • 1970-01-01
          • 2023-03-23
          • 2013-03-10
          • 2013-11-15
          相关资源
          最近更新 更多