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)