SpringBean生命周期

首先Java对象和Spring所管理的Bean实例化过程不同
在Java中
1).java文件被编译成.class文件
2)等到类需要被初始化时(new,反射).calss文件被虚拟机通过类加载器加载
3)初始化对象供我们使用
在Spring中
会用BeanDefinition的实例来描述对象的信息
Bean的加载过程
1.注册BeanFactory后置处理器
2.通过BeanFactory后置处理器扫描出所有需要spring管理的类
3.通过BeanFactory后置处理器封装成BeanDefinition加载到BeanFactory
4.创建非延迟加载的bean实例
Bean被加载后的实例化过程
执行实例化前操作
创建Bean实例
将Bean缓存起来(缓存到三级缓存中,二级缓存中有代理模式)
给Bean填充属性值
初始化Bean
(1) 执行BeanPostProcessor-postProcessBeforeInitialization(2) 执行InitializingBean->afterPropertiesSet(3) 执行initMethod(4) 执行BeanPostProcessor-postProcessAfterInitialization
spring是如何解决属性循环依赖的
其中用到了缓存
而这个缓存再具体的话就是三级的缓存

Bean实例化的过程如上,第三步缓存bean就是为了解决循环依赖的,例如:A与B属性循环依赖。
A执行第二,三步,调用构造函数并将实例加入缓存;
A执行第四步时找不到B实例,于是先去执行B的实例化;
B执行到第4步时从缓存中能够找到A实例,于是B实例化成功;
接着再执行A的实例化。
Bean的生命周期
在这里插入图片描述

1.BeanDefined
2.BeanFactoryPostProcessor对BeanDefined后置处理
3.InstantiationAwareBeanPostProcessor.postProcessBeforeInstantiation实例化前执行
4.Bean实例化
5.InstantiationAwareBeanPostProcessor.postProcessAfterInstantiation实例化后执行
6.属性注入
7.BeanNameAware.setBeanName
8.BeanFactoryAware.setBeanFactory
9.ApplicationContextAware.setApplicationContext
10.BeanPostProcessor的前置方法
11.InitializingBean.afterPropertiesSet方法
12.@PostConstruct修饰的方法
13.BeanPostProcessor的后置操作
14.DisposableBean.destory销毁

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值