Bean的生命周期:
- Bean实例的创建
实例化对应代码,使用合适的初始方案来创建一个新的bean实例,factory-method,或者构造器注入,或者构造器注入,或者简单实例化
实例化策略类:
InstantiationStrategy
实例化具体方法:AbstractAutowireCapableBeanFactory.createBeanInstance(String beanName, RootBeanDefinition mbd, Object[] args)
-
设置bean的属性(依赖注入)
-
检查bean的Aware接口,如果bean实现了BeanNameAware接口,调用bean的setBeanName()传递Id
-
如果bean实现了BeanFactorAware接口,调用bean的setBeanFactor()传递工厂自身
-
bean前处理器: BeanPostProcessor.postProcessBeforeInitialization(Object bean,String beanName)
-
调用bean的初始化方法
-
bean后处理器: BeanPostProcessor.postProcessAfterInitialization(Object bean,String beanName)
-
应用通过IOC容器使用bean
-
停止bean的使用 SmartLifecycle.stop(Runnable callback)
stop方法在Application.close的时候,调用getLifecycleProcessor().stop()方法仍然在DefaultLifecycleProcessor内部 -
当容器关闭时,调用bean的销毁方法
DisposableBean.destroy方法,doCreateBean方法中会判断bean是否有销毁相关操作,实现了DisposableBean方法或定义了销毁方法。
代码样例: