递归复习之三
当Ioc容器启动之后并不会马上就实例化相应的bean,此时容器仅仅拥有所有对象的BeanDefinition。只有当BeanFactory调用getBean()方法时才是有可能触发Bean实例化阶段的活动。
getBean()方法第一次被调用时,不管是显示还是隐式的,Bean的实例化阶段才会被触发,第二次调用时则会直接返回容器缓存的第一次实例化的对象实例。
Bean的生命周期
- 实例化bean对象(通过构造方法或者工厂方法)
- 设置对象属性(setter等)依赖注入
- 如果Bean实现了BeanNameAware接口,工厂调用Bean的setBeanName()方法传递Bean的ID
- 如果Bean实现了BeanFactoryAware接口,工厂调用setBeanFactory()方法传入工厂自身。
- 将Bean实例传递给Bean的前置处理器的postProcessBeforeIniitialization(Object bean,String beanname)方法(这个方法是干啥的呢?)
- 调用Bean的初始化方法
- 将Bean实例传递给Bean的后置处理器的postProcessAfterInitialization(Object bean,String beanname)方法
- 使用bean
- 容器关闭之前,调用Bean的销毁方法
Bean的后置处理器
bean的后置处理器,是为了对bean的一个增强
用法:分别在Bean的初始化前后对Bean对象提供自己的实例化逻辑
- 实现BeanPostProcessor接口
- postProcessBeforeInitialization方法
- postProcessAfterInitialization方法
参考资料:https://blog.youkuaiyun.com/w_linux/article/details/80086950