You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Spring XML Bean定义迁移至@Configuration类(含JMS配置)

Spring XML转@Configuration:JmsTemplate与JMS监听器配置迁移

一、迁移JmsTemplate Bean

XML中定义的jmsProducerTemplate可直接转为@Bean方法,通过参数注入对应连接工厂即可:

@Bean("jmsProducerTemplate")
public JmsTemplate jmsProducerTemplate(ConnectionFactory connectionFactory) {
    JmsTemplate template = new JmsTemplate();
    template.setConnectionFactory(connectionFactory);
    return template;
}

注:此写法等价于XML中的p:connectionFactory-ref="connectionFactory",Spring会自动注入匹配的connectionFactory Bean。

二、完善JmsListenerContainerFactory并配置监听器

你已编写的容器工厂需补充XML中acknowledge="auto"的配置,同时XML中的<jms:listener>并非在配置类中定义,而是通过@JmsListener注解标注在实际的监听类方法上:

1. 完善容器工厂

@Bean("myContainerFactory")
public JmsListenerContainerFactory<?> myContainerFactory(ConnectionFactory connectionFactory) {
    DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
    factory.setConnectionFactory(connectionFactory);
    factory.setPubSubDomain(false); // 对应队列模式,XML默认即为队列
    factory.setSessionAcknowledgeMode(Session.AUTO_ACKNOWLEDGE); // 匹配XML的acknowledge="auto"
    return factory;
}

2. 配置监听类(对应XML中的theListenerClassYouAreUsing)

创建监听类并标注@Component,在消息处理方法上用@JmsListener指定目标队列:

@Component
public class TheListenerClassYouAreUsing {

    @JmsListener(destination = "YOURQUEUENAME", containerFactory = "myContainerFactory")
    public void handleMessage(Message message) {
        // 此处编写消息处理逻辑
    }
}

注:@JmsListener的destination参数对应XML中<jms:listener>的destination属性,containerFactory指定我们配置的工厂Bean。

完整@Configuration类示例

@Configuration
public class JmsConfig {

    // 假设你已实现连接工厂的Bean定义
    @Bean
    public ConnectionFactory pooledConnectionFactory() {
        // 替换为你的实际连接工厂实现,比如ActiveMQConnectionFactory
        return new ActiveMQConnectionFactory("tcp://localhost:61616");
    }

    @Bean("jmsProducerTemplate")
    public JmsTemplate jmsProducerTemplate(ConnectionFactory connectionFactory) {
        JmsTemplate template = new JmsTemplate();
        template.setConnectionFactory(connectionFactory);
        return template;
    }

    @Bean("myContainerFactory")
    public JmsListenerContainerFactory<?> myContainerFactory(ConnectionFactory connectionFactory) {
        DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
        factory.setConnectionFactory(connectionFactory);
        factory.setPubSubDomain(false);
        factory.setSessionAcknowledgeMode(Session.AUTO_ACKNOWLEDGE);
        return factory;
    }
}

内容的提问来源于stack exchange,提问作者Jhoan Peguero

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 23:45:54