Spring bean 生命周期

源码:AbstractAutowireCapableBeanFactory.doCreateBean

1. 实例化bean
2. 调用bean的set方法给属性赋值
3. 检查/执行BeanNameAware接口 setName (可选,实现BeanNameAware)
   检查/执行BeanClassLoaderAware接口 setBeanClassLoader(可选,实现BeanClassLoaderAware)
   检查/执行BeanFactoryAware接口 setBeanFactory(可选,实现BeanFactoryAware)
4. 执行bean后处理器的before (可选,自己实现BeanPostProcessor)
5. 检查/执行InitializingBean接口afterPropertiesSet (可选,实现InitializingBean)
6. 初始化bean (可选,调用自定义init方法)
7. 执行bean后处理器的after(可选,自己实现BeanPostProcessor)
8. 使用bean
9. 检查/执行DisposableBean接口destroy (可选,实现DisposableBean)
10. 销毁bean (可选,在容器关闭时调用自定义destroy方法)

spring只对scope为singleton的实例进行完整的生命周期管理,如果是prototype只负责到初始化完毕。一旦对象被客户端获取(getBean),spring不再负责该bean生命周期。