Bean的生命周期管理

Spring的Bean容器只管理非单例Bean的生命周期,单例Bean的生命周期不在管理范围内。用一张很老的图来展示下Bean的生命周期管理
Bean生命周期
关于这张图里面我们可以主要关注3个类:

  • BeanPostProcessor:这个接口定义了两个方法,分别是:postProcessBeforeInitialization和postProcessAfterInitialization,分别在初始化Bean之前和之后被调用,通过这两个方法,接口的实现者可以修改Bean的定义信息。如果接口的实现者需要定制多个BeanPostProcessor,那么它也需要实现Ordered接口。和这个类的非常相似的一个类是BeanFactoryPostProcessor,这两个类的一个区别使后者操纵的使Bean配置信息的元数据,这就意味着Spring允许在容器初始化Bean之前去修改Bean配置信息的元数据。这个接口的一个实现就是PropertyPlaceholderConfigurer和PropertyOverrideConfigurer,具体的例子可以参考Spring Reference
  • InitializingBean:这个接口定义了一个afterPropertiesSet()方法,这个方法在Bean的属性被全部设置后发出。
  • DesposableBean:这个接口定义了一个destroy()方法,这个方法在可以在Bean销毁时调用,比如可以做释放资源用。