java application生命周期_02-Spring中Bean的生命周期

Bean的生命周期

2b1557c0ee56

image.png

一个简单的Bean的生命周期:

推断构造方法(确定使用哪个构造方法来实例化对象)

实例化

填充属性

初始化

源码步骤:启动AnnotationConfigApplicationContext->创建BeanFactory->初始化BeanFactory->执行BeanFactory后置处理器->进行扫描->

生产BeanDefinition->合并BeanDefinition->加载类->实例化前->腿短构造方法->实例化->BeanDefinition的后置处理器->填充属性->执行Aware->初始化前->初始化->初始化后

Bean的销毁过程

容器关闭

发布ContextClosedEvent事件

调用LifecycleProcessor的onClose方法

销毁单例Bean

找出所有DisposableBean(实现了DisposableBean接口的Bean)

遍历每个DisposableBean

找出依赖了当前DisposableBean的其他Bean,将这些Bean从单例池中移除掉

调用DisposableBean的destroy()方法

找到当前DisposableBean所包含的inner beans

父子BeanDefinition

父子BeanDefinition是Spring中的概念,Spring在根据BeanDefinition创建Bean的过程中,会先看当前BeanDefinition是否存在父BeanDefinition,如果存在则需要进行合并,合并就是把子BeanDefinition和父BeanDefinition中所定义的属性整合起来(如果存在某个属性在父子BeanDefinition中都存在,那么取子BeanDefinition中的属性)

父子BeanFactory 类似java的类加载反的委派机制

BeanFactory是一个Bean的容器,在Spring中,当我们在使用某个BeanFactory去获取Bean时,如果本BeanFactory中不存在该Bean,同时又有父BeanFactory,那么则会检查父BeanFactory是否存在该Bean,如果也不存在,那么则会创建Bean。

父子ApplicationContext

父子ApplicationContext和父子BeanFactory类似,子ApplicationContext除开可以使用父ApplicationContext来获取Bean之外,还可以使用父ApplicationContext中其他的东西,比如ApplicationListener

BeanPostProcessor(Bean的后置处理器)

Bean的后置处理器是指Spring在创建一个Bean的过程中,可以通过后置处理器来干涉Bean的创建过程。

Spring在 '一个简单的Bean的生命周期'基础上,在这4步中的某些"间隙"中增加了扩展点,比如:

BeanPostProcessor:提供了初始化前、初始化后

InstantiationAwareBeanPostProcessor:在BeanPostProcessor的基础上增加了实例化前、实例化后、填充属性后

MergedBeanDefinitionPostProcessor:在BeanPostProcessor的基础上增加了在实例化和实例化后之间的扩展点

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值