无法自动装配ExceptionListener

时间:2017-03-16 18:41:01

标签: java spring spring-boot jms spring-jms

我创建了一个MessageListener,它将使用来自Azure服务总线的消息。使用SingleConnectionFactory创建连接时,我尝试设置ExceptionListener。我的ExceptionListener和配置都在不同的类中。所以在我的Configuration类中,我试图自动装配一个实现ExceptionListener的类。当我这样做时,我得到Autowired ExceptionListener为null。请告知我是否可以自动加载ExceptionListener。请在下面找到我的示例代码:

@Component
public class JMSExcepListener implements ExceptionListener{
@Autowired
private DefaultMessageListenerContainer listenerContainer;

@Autowired
private SingleConnectionFactory conFactory;

@Override
public void onException(JMSException exception) {
    listenerContainer.destroy();
    listenerContainer.initialize();
    try {
        conFactory.createConnection();
    } catch (JMSException e) {
        e.printStackTrace();
    }
    System.out.println("Exception");
}}

我在SingleConnectionFactory

注册了这个监听器
@Configuration
public class AzureConfig{
@Autowired
    JMSExcepListener  jmsExcListener;
@Autowired
MessageConsumer messageConsumer;
    @Bean
    public SingleConnectionFactory jmsConnectionFactory() {
        SingleConnectionFactory cachingConnectionFactory = null;
        try {
            cachingConnectionFactory = new SingleConnectionFactory(ConnectionFactoryImpl.createFromURL(url));
            cachingConnectionFactory.setReconnectOnException(true);
            cachingConnectionFactory.setClientId(applicationName);
            singConnFactory.setExceptionListener(jmsExcListener);
        } catch (MalformedURLException e) {

        }
        return cachingConnectionFactory;
    }
    }
 @Bean
public DefaultMessageListenerContainer getContainer() {
    DefaultMessageListenerContainer container = new  DefaultMessageListenerContainer();
    container.setConnectionFactory(jmsConnectionFactory());
    container.setDestinationName(queueName);
    container.setMessageListener(messageConsumer);
    return container;
}
}

此处jmsExcListener将显示为空,但消息使用者工作正常请帮助。

是否因为任何循环注入,因为我试图在AzureConfig中注入ExcepitonListener并尝试将在AzureConfig中创建的bean注入到ExceptionListener中。如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

以防您从未注意到这一点;你有一个循环的依赖链。

JMSExcepListener类需要一个SingleConnectionFactory(通过自动装配) 在AzureConfig中创建的 反过来又需要一个JMSExcepListener(通过自动装配)的bean。

解决方案始终是这样的:不要在配置类的类级别自动关联依赖项。