Spring提供了下面几个操作容器的接口:
1. ApplicationContextAware接口
方法:setApplicationContext
加载Spring配置文件时,如果Spring配置文件中所定义的Bean类实现了ApplicationContextAware 接口,那么在加载Spring配置文件时,
会自动调用ApplicationContextAware接口中的setApplicationContext方法,获得ApplicationContext对象。
前提必须在Spring配置文件中指定该类
2. Spring的BeanPostProcessor接口
方法:(1) postProcessBeforeInitialization
(2)postProcessAfterInitialization
该接口作用是:如果我们需要在Spring容器完成Bean的实例化,配置和其他的初始化后添加一些自己的逻辑处理,
我们就可以定义一个或者多个BeanPostProcessor接口的实现。
3. ApplicationListener接口
方法:onApplicationEvent
如果在上下文中部署一个实现了ApplicationListener接口的bean,那么每当在一个ApplicationEvent发布到 ApplicationContext时,这个bean得到通知。其实这就是标准的Observer设计模式。
如果追踪的是ContextRefreshedEvent事件:当Spring的Context初始化完后,会触发这个事件
调用顺序:
(1) ApplicationContextAware#setApplicationContext
(2) Bean的构造函数
(3) BeanPostProcessor#postProcessBeforeInitialization
(4) Bean中的加了@PostConstruct声明的方法
(5) BeanPostProcessor#postProcessAfterInitialization
(6) ApplicationListener#onApplicationEvent(ContextRefreshedEvent)