创建应用上下文容器
this方法调用无参构造函数过程:
注册配置类过程:
调用refresh方法过程:
主要是两个方法invokeBeanFactoryPostProcessors调用Bean工厂的后置处理器、finishBeanFactoryInitialization实例化Bean定义Map中未实例化的Bean
invokeBeanFactoryPostProcessors过程(扫描配置类并将Class注册为Bean定义):
finishBeanFactoryInitialization过程(Bean实例化流程):



为了解耦、方法职责单一、方便后期维护。
Spring事件机制是观察者模式的一种实现,但是除了发布者和监听者者两个角色之外,还有一个EventMultiCaster的角色负责把事件转发给监听者。

| Event | 说明 |
|---|---|
| ContextRefreshedEvent | 当容器被实例化或refreshed时发布。如调用refresh()方法,此处的实例化是指所有的bean都已被加载,后置处理器都被激活,所有单例bean都已被实例化,所有的容器对象都已准备好可使用。 |
| ContextStartedEvent | 当容器启动时发布,即调用start()方法,已启用意味着所有的Lifecycle bean都已显式接收到了start信号。 |
| ContextStoppedEvent | 当容器停止时发布,即调用stop()方法,即所有的Lifecycle bean都已显式接收到了stop信号,关闭的容器可以通过start()方法重启 |
| ContextClosedEvent | 当容器关闭时发布,即调用close方法。关闭意味着所有的单例bean都已被销毁,关闭的容器不能被重启或refresh。 |
| 自定义事件 | 事件类需要继承ApplicationEvent |