用动物做logo的旅游网站,wordpress模块修改,徐州网站定制,外链生成原文#xff1a;《web服务启动spring自动执行ApplicationListener的用法》
引言
我们知道#xff0c;一般来说一个项目启动时需要加载或者执行一些特殊的任务来初始化系统#xff0c;通常的做法就是用servlet去初始化#xff0c;但是servlet在使用Spring bean时不能直接注…原文《web服务启动spring自动执行ApplicationListener的用法》
引言
我们知道一般来说一个项目启动时需要加载或者执行一些特殊的任务来初始化系统通常的做法就是用servlet去初始化但是servlet在使用Spring bean时不能直接注入还需要在web.xml配置比较麻烦。今天介绍一下使用spring启动初始化的方法。其实很简单只需两步就可以了。
在开发时有时候需要在整个应用开始运行时执行一些特定代码比如初始化环境准备测试数据、加载一些数据到内存等等。
在spring中可以通过ApplicationListener来实现相关的功能加载完成后触发contextrefreshedevent事件上下文件刷新事件
但是这个时候会存在一个问题在web 项目中spring mvc系统会存在两个容器一个是root application context ,另一个就是我们自己的 projectName-servlet context作为root application context的子容器。
这种情况下就会造成onApplicationEvent方法被执行两次。为了避免上面提到的问题我们可以只在root application context初始化完成后调用逻辑代码其他的容器的初始化完成则不做任何处理修改后代码。
实现方式
1、实现ApplicationListener接口
public class Init implements ApplicationListenerContextRefreshedEvent{Overridepublic void onApplicationEvent(ContextRefreshedEvent event) {//root application context 没有parentif(event.getApplicationContext().getDisplayName().equals(RootWebApplicationContext)){//TODO 这里写下将要初始化的内容}}
}
2、将Init类注册到Spring 容器中
Configuration
public class ListenerConfig {Beanpublic Init init() {return new Init();}
}或通过注解方式
Component
public class Init implements ApplicationListenerContextRefreshedEvent {// 省略内部代码
}
二次调用问题
上面第一步中的实现代码已经通过判断父容器来解决了二次调用的问题关于二次调用的解释可以参考下面这篇文章
《Spring ApplicationListener使用方法及问题》