Spring Bean 的生命周期详解

137 阅读2分钟

创建前的准备阶段

这个阶段主要是在开始 Bean 加载之前,从 Spring 上下文和相关配置中解析并查找 Bean 有关的配置内容, 比如 init-method-容器在初始化 bean 时调用的方法、destory-method,容器在销毁 Bean 时调用的方法。 以及,BeanFactoryPostProcessor 这类的 bean 加载过程中的前置和后置处理。 这些类或者配置其实是 Spring 提供给开发者,用来实现 Bean 加载过程中的扩展机制, 在很多和 Spring 集成的中间件经常使用。

创建实例阶段

这个阶段主要是通过反射来创建 Bean 的实例对象,并且扫描和解析 Bean 声明的一些 属性。

依赖注入阶段

在这个阶段,会检测被实例化的 Bean 是否存在其他依赖,如果存在其他依赖,就需要对这些被依赖 Bean 进行注入。比如通过读取 @Autowired、@Setter 等依赖注入的配置。 在这个阶段还会触发一些扩展的调用,比如常见的扩展类:BeanPostProcessors(用 来实现 Bean 初始化前后的回调)、 InitializingBean 类(这个类有一个 afterPropertiesSet()方法,给属性赋值)、还有 BeanFactoryAware 等等。

容器缓存阶段

容器缓存阶段主要是把 Bean 保存到 IoC 容器中缓存起来,到了这个阶段,Bean 就可 以被开发者使用了。 这个阶段涉及到的操作,常见的有,init-method 这个属性配置的方法,会在这个阶段 调用。 在比如 BeanPostProcessors 方法中的后置处理器方法如: postProcessAfterInitialization,也是在这个阶段触发的

销毁实例阶段

这个阶段,是完成 Spring 应用上下文关闭时,将销毁 Spring 上下文中所有的 Bean。 如果 Bean 实现了 DisposableBean 接口,或者配置了 destory-method 属 性,将会 在这个阶段被调用。