Author:赵志乾
Date:2019-05-16
Declaration:All Right Reserved!!!
实际项目开发中,经常会遇到“应用启动时进行初始化”的诉求。在基于Spring框架的项目中,解决方案如下:
1、监听ContextRefreshedEvent事件
Spring容器初始化完成后(onRefresh)会触发ContextRefreshedEvent事件,因此可以在监听该事件的方法中完成一些初始化操作。
//使用注解@Commponent将MyInit交由Spring IoC容器进行管理
@Component
//实现ApplicationListener接口来作为应用事件监听者,并通过指定泛型参数为
//ContextRefreshedEvent来表明自己只关心ContextRefreshedEvent事件
public class MyInit implements ApplicationListener<ContextRefreshedEvent> {
@Override
//事件处理函数
public void onApplicationEvent(ContextRefreshedEvent event){
//此处判断主要是用于解决web应用中的重复刷新问题,因为web应用中会存在父子容器,导致
//事件ContextRefreshedEvent会被触发多次。通过限定只在父容器刷新事件触发时才进行
//处理,从而解决多次触发问题。
if(event.getApplicationContext().getParent()==null){
//初始化函数
init();
}
}
//自定义初始化
private void init(){
//自定义的初始化逻辑
}
}