ApplicationContextInitializer
作用:IOC容器对象创建完成后执行,可以对上下文环境做一些操作,例如运行环境属性注册等。
ApplicationContextInitializer如何使用?
1-自定义类,实现ApplicationContextInitializer接口
2-在META-INF/spring.factories配置文件中配置自定义类
initializer方法什么时候执行?
IOC容器对象创建完成后执行,常用语环境属性注册。
代码示例
import org.springframework.context.ApplicationContextInitializer;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.core.env.ConfigurableEnvironment;
import org.springframework.core.env.MapPropertySource;
import org.springframework.core.env.MutablePropertySources;
import java.util.HashMap;
import java.util.Map;
public class MyApplicationContextInitializer implements ApplicationContextInitializer {
/**
* ioc容器对象创建完毕后执行
*/
@Override
public void initialize(ConfigurableApplicationContext applicationContext) {
//给上下文(context)对象注入环境变量
//1.准备属性
Map<String,Object> myMap = new HashMap<>();
myMap.put("applicationName", "big-event");
//2.获取一个属性资源管理对象
ConfigurableEnvironment environment = applicationContext.getEnvironment();
//属性资源管理对象
MutablePropertySources propertySources = environment.getPropertySources();
//3.注册
//addList 最后注册
//addFirst 最先注册
propertySources.addLast(new MapPropertySource("myMap",myMap));
}
}
org.springframework.context.ApplicationContextInitializer=com.example.demo.demos.web.initializer.MyApplicationContextInitializer
ApplicationListener
作用:监听容器发布的事件,允许程序员执行自己的代码,完成事件驱动开发,它可以监听容器初始化完成、初始化失败等事件。通常情况下可以使用监听器加载资源,开启定时任务等。
ApplicationListener如何使用(与ApplicationContextInitializer类似)
1-自定义类,实现ApplicationListener接口
2-在META-INF/spring.factories配置文件中配置自定义类
onApplicationEvent什么时候执行?
IOC容器发布事件之后执行,通常用于资源加载,定时任务发布等。
代码示例:
import org.springframework.boot.context.event.ApplicationFailedEvent;
import org.springframework.boot.context.event.ApplicationReadyEvent;
import org.springframework.context.ApplicationEvent;
import org.springframework.context.ApplicationListener;
public class MyListener implements ApplicationListener {
@Override
public void onApplicationEvent(ApplicationEvent event) {
//ApplicationEvent event 对应的就是发布的时间
//ApplicationReadyEvent 代表容器初始化成功
//ApplicationFailedEvent 代表容器初始化失败
if(event instanceof ApplicationReadyEvent){
//容器初始化成功
System.out.println("容器初始化成功");
}
if(event instanceof ApplicationFailedEvent){
//代表容器初始化失败
System.out.println("代表容器初始化失败");
}
}
}
org.springframework.context.ApplicationListener=com.example.demo.demos.web.listener.MyListener