生命周期

Spring Bean的生命周期分为四个阶段。
实例化 —> 属性赋值 —> 初始化 —> 销毁
createBeanInstance() —> 实例化
populateBean() —> 属性赋值
initializeBean() —> 初始化

常用扩展点

影响多个Bean的接口

  • BeanPostProcessor — 作用于初始化阶段的前后(第三个生命周期)
  • InstantiationAwareBeanPostProcessor — 作用于实例化阶段的前后 (第一个生命周期)

实现了以上接口的Bean会切入到多个Bean的生命周期中,Spring内部扩展也经常使用这些接口,例如自动注入和AOP的实现都和他们有关。

只调用一次的接口

  • Aware类型的接口

BeanNameAware
在创建bean的bean工厂上设置bean的名称。
在普通属性设置之后调用,在 InitializingBean.afterPropertiesSet() 方法之前调用
BanClassLoaderAware
在普通属性设置之后, InitializingBean.afterPropertiesSet() 之前调用
BeanFactoryAware
回调提供自己的bean实例工厂,在普通属性设置之后,在 InitializingBean.afterPropertiesSet() 或者自定义初始化方法之前调用。

Spring为bean提供两种初始化bean的方式,实现InitializingBean接口,实现afterPropertiesSet方法,或者在配置文件中通过init-method指定,两种方式可以同时使用。
实现InitializingBean接口是直接调用afterProperties方法,比通过反射调用init-method指定的方法效率要高一点,但是init-method消除了对spring的依赖。

  • 生命周期的接口

InitializingBean 初始化阶段
DisposableBean 销毁阶段