您的位置:首页 > 编程语言 > Java开发

spring容器加载完毕做一件事情(利用ContextRefreshedEvent事件)

2015-07-23 23:07 609 查看
最近在做项目的时候遇到一个问题,就是在spring加载完所有bean的时候要获取所有AMQ消息队列的容器对象,从而可以实现方便地对其进行控制,比如运行某一个消息队列容器对象,使其开始消费AMQ消息。

问了下度娘,总体解决方案如下:

1、写一个类继承spring的ApplicationListener<ContextRefreshedEvent>监听,并监控ContextRefreshedEvent事件(容易初始化完成事件)

2、在XML配置一下上面的bean,或者直接使用@Component等注解

代码如下:

。。。。。。。待插入代码

但是这时候又遇到一个问题,就是发现ContextRefreshedEvent被触发了两次。查了下原因,原来项目中存在两个上下文环境,一个是root上下文环境,还有一个是非root上下文环境,为了防止重复初始化,所以在ContextRefreshedEvent事件代码中得加上以下的判断

if(context.getParent == null){
    // 初始化代码....
}
这样的话,只有是root上下文环境才会触发该事件。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: