码迷,mamicode.com
首页 > 其他好文 > 详细

消息监听器无法注入bean

时间:2018-07-15 23:50:59      阅读:448      评论:0      收藏:0      [点我收藏+]

标签:bean   原因   osi   监听   message   list   ref   autowire   sdn   

问题描述:

在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

消息监听器无法注入bean

标签:bean   原因   osi   监听   message   list   ref   autowire   sdn   

原文地址:https://www.cnblogs.com/xyhero/p/77fb56ab8abcb918411d57e805c1c8b4.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!