消息监听器无法注入bean

2018-07-16 02:39:55来源:博客园 阅读 ()

新老客户大回馈,云服务器低至5折

问题描述:

在activemq的监听器中,通过注解@Autowired或@Resource注入bean时,获取到的bean为null。调用该bean的方法时会报空指针异常。

问题原因:

当调用bean内方法时,spring容器中还没有完成对注解bean的扫描,dispatcher.xml中配置的注解bean的优先级没有框架中的contextListener的优先级高,所以contextListener初始化的时候根据@Autowired扫描,肯定是null的。

解决办法:

在web.xml文件中增加一个监听器类,该类实现ServletContextListener,ApplicationContextAware这两个接口。

1
2
3
<listener>
    <listener-class>com.activemq.common.InitComponent</listener-class>
</listener>

当容器启动的时候,会执行该类中的contextInitialized(ServletContextEvent servletContextEvent)方法。

我们要做的,就是在该类中新增获取bean的方法。

1
2
3
4
5
6
7
8
9
10
@SuppressWarnings("unchecked")
public static <T> T getBean(String name) {  
    checkApplicationContext();  
    return (T) applicationContext.getBean(name);  
}
private static void checkApplicationContext() {  
    if (applicationContext == null) {
        throw new IllegalStateException("applicaitonContext未注入");  
    }  
}

此时,获取bean的方式就变为:

1
2
ConsumerDao consumerDao = InitComponent.getBean("ConsumerDao");
consumerDao.saveMessage(param);

注意:

ConsumerDao接口上需要加上注解:@Repository("ConsumerDao")

参考文章:

http://blog.csdn.net/gaoshili001/article/details/77776863

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:关于win10 eclipse如何配置环境变量

下一篇:day32_Hibernate学习笔记_04