博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
spring容器加载完毕做一件事情(利用ContextRefreshedEvent事件)转
阅读量:6197 次
发布时间:2019-06-21

本文共 2144 字,大约阅读时间需要 7 分钟。

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

应用场景:很多时候我们想要在某个类加载完毕时干某件事情,但是使用了spring管理对象,我们这个类引用了其他类(可能是更复杂的关联),所以当我们去使用这个类做事情时发现包空指针错误,这是因为我们这个类有可能已经初始化完成,但是引用的其他类不一定初始化完成,所以发生了空指针错误,解决方案如下: 
1、写一个类继承spring的ApplicationListener监听,并监控ContextRefreshedEvent事件(容易初始化完成事件) 
2、定义简单的bean:<bean id="beanDefineConfigue" class="com.creatar.portal.webservice.BeanDefineConfigue"></bean> 
或者直接使用@Component("BeanDefineConfigue")注解方式 
完整的类如下: 
package com.creatar.portal.webservice; 
import org.springframework.context.ApplicationListener; 
import org.springframework.context.event.ContextRefreshedEvent; 
import org.springframework.stereotype.Component; 
@Component("BeanDefineConfigue") 
public class BeanDefineConfigue implements 
ApplicationListener<ContextRefreshedEvent> {//ContextRefreshedEvent为初始化完毕事件,spring还有很多事件可以利用 
// @Autowired 
// private IRoleDao roleDao; 
/** 
* 当一个ApplicationContext被初始化或刷新触发 
*/ 
@Override 
public void onApplicationEvent(ContextRefreshedEvent event) { 
// roleDao.getUserList();//spring容器初始化完毕加载用户列表到内存 
System.out.println("spring容易初始化完毕================================================"); 
或者使用xml配置方式(非注解),简单配置个bean即可 
<bean id="beanDefineConfigue" class="com.creatar.portal.webservice.BeanDefineConfigue"></bean> 
其他定义方式: 
完整的类如下: 
package com.creatar.portal.webservice; 
import java.util.ArrayList; 
import java.util.List; 
import org.springframework.context.ApplicationEvent; 
import org.springframework.context.ApplicationListener; 
import org.springframework.context.event.ContextRefreshedEvent; 
import org.springframework.stereotype.Component; 
@Component("BeanDefineConfigue2") 
public class BeanDefineConfigue2 implements ApplicationListener<ApplicationEvent> { 
List<String> list = new ArrayList<String>(); 
/** 
* 当一个ApplicationContext被初始化或刷新触发 
*/ 
@Override 
public void onApplicationEvent(ApplicationEvent event) { 
if (event instanceof ContextRefreshedEvent) { 
System.out.println("spring容易初始化完毕================================================888"); 
spring其他事件: 
spring中已经内置的几种事件: 
ContextClosedEvent   、ContextRefreshedEvent  、ContextStartedEvent  、ContextStoppedEvent   、RequestHandleEvent 

转载于:https://www.cnblogs.com/zr520/p/5143523.html

你可能感兴趣的文章
java实现类似qq的窗口对聊
查看>>
使用Java创建RESTful Web Service(转)
查看>>
常用的Mysql数据库操作语句大全
查看>>
bootstrap tab切换如何让鼠标移动自动切换内容
查看>>
Linq表达式、Lambda表达式你更喜欢哪个?
查看>>
Java学习——变量类型
查看>>
作为一名职高生学习Linux的心酸经历
查看>>
json数组的序列化和反序列化json数组的序列化和反序列化
查看>>
openjudge6047分蛋糕[DP]
查看>>
C#通过WebClient/HttpWebRequest实现http的post/get方法
查看>>
android:clipToPadding和android:clipChildren
查看>>
iOS学习笔记(4) — UITableView的 重用机制
查看>>
进制转换
查看>>
支付宝接口错误:您使用的私钥格式错误,请检查RSA私钥配置,charset = utf-8
查看>>
『HTML5挑战经典』是英雄就下100层-开源讲座(二)危险!英雄
查看>>
字符串替换
查看>>
android项目 之 记事本(13) ----- 查看图片及播放录音
查看>>
娱乐一下:汤姆君的大转盘算法(搞笑版)
查看>>
dubbo的泛化调用研究
查看>>
The client and server cannot communicate, because they do not possess a common algorithm
查看>>