Spring中Bean的生命周期是一个困扰了我很久的问题,在网上找的各种五花八门的答案看的我是眼花缭乱,一头雾水,外加一大堆看不懂的代码更是搞的我云里雾里,在经过了长久的归纳总结思考,终于理清了这其中的逻辑。

  Spring Bean的生命周期其实可以围绕以下一段配置文件展开:

1 <bean id="student" class="com.wx.test.entity.Student">
2         <property name="name" value="小明"/>
3         <property name="age" value="12"/>
4 </bean>

  以上是一段很简单的代码,用来创建bean并注入相关属性(姓名、年龄),这就是bean的生命周期的起始。当然这只是简单的表现,Bean的生命周期实际上比这复杂,因为这其中涉及到很多接口需要去实现,这些接口我们很少会关心,我总结出的bean的生命周期大致可以分为以下几个步骤: 

  ① Spring IoC容器找到关于Bean的定义并实例化该Bean。
  ② Spring IoC容器对Bean进行依赖注入。
  ③ 如果Bean实现了BeanNameAware接口,则将该Bean的id传给setBeanName方法。
  ④ 如果Bean实现了BeanFactoryAware接口,则将BeanFactory对象传给setBeanFactory方法。
  ⑤ 如果Bean实现了BeanPostProcessor接口,则调用其postProcessBeforeInitialization方法。
  ⑥ 如果Bean实现了InitializingBean接口,则调用其afterPropertySet方法。
  ⑦ 如果有和Bean关联的BeanPostProcessors对象,则这些对象的postProcessAfterInitialization方法被调用。
  ⑧ 当一个bean不再被调用时将从bean容器中移除。
  ⑨ 当销毁Bean实例时,如果Bean实现了DisposableBean接口,则调用其destroy方法。

  如果你觉得以上还有有些复杂,那么你可以大概这样理解:

  spring Bean的生命周期简单易懂,首先初始化bean实例,其次spring ioc容器对bean进行依赖注入,然后实现一系列spring bean的接口,最后当一个bean不再被调用时将从bean容器中移除,如果bean实现了DisposableBean接口,则调用其destory方法。

  最后补充一些内容,看不明白可以不看:

  

Spring bean factory 负责管理在 spring 容器中被创建的 bean 的生命周期。Bean 的生命周期由两组回调(call back)方法组成。
    - 初始化之后调用的回调方法。
    - 销毁之前调用的回调方法。

Spring 框架提供了以下四种方式来管理 bean 的生命周期事件:

- InitializingBean 和 DisposableBean 回调接口
- 针对特殊行为的其他 Aware 接口
- Bean 配置文件中的 Custom init() 方法和 destroy() 方法
- @PostConstruct 和 @PreDestroy 注解方式
01-07 05:53