Spring源码之Bean生命周期

一、Bean的生命周期

生命周期:Bean对象的创建、使用和销毁过程;

1. 实例化

  • 创建对象 createBeanInstance ()
在堆空间中申请空间,此时对象的属性值一般是默认值
反射创建对象的过程:
createBeanInstance -> 获取clazz对象 -> 获取构造器 -> 实例化创建对象ctor.newInstance(argsWithDefaultValues);

2. 属性赋值

  • 自定义属性 赋值 populateBean()
populateBean()调用set()方法完成属性赋值
  • 容器对象 属性赋值 Aware接口
Aware接口类似于Serializable接口
检查Aware相关接口并设置依赖;
invokeAwareMethods()方法回调Aware接口中的方法来完成属性值的注入

执行完属性赋值后,对象的创建和属性赋值已经完成,理论上对象此时可以直接拿来使用。但基于扩展性的考虑,Spring方法还需要进行初始化

3. 初始化(Bean对象的扩展实现)

  • BeanPostProcessor 接口含有两个方法实现前置处理与后置处理:
前置处理方法 :postProcessBeforeInitialization
后置处理方法:postProcessAfterInitialization
  • BeanPostProcessor AOP 底层实现动态代理(jdk、cglib)
BeanPostProcessor 接口 ->  AbstractAutoProxyCreator抽象类  ->  postProcessAfterInitialization方法 -> wrapIfNecessary 方法 -> createProxy()方法 -> ProxyFactory代理工厂实现AOP代理
注意:AOP是IOC整体流程中的一个扩展点
  • invokeInitMethods 执行初始化方法
检测Bean是否实现了InitializingBean接口  -> 调用afterPropertiesSet()方法
  • 执行顺序
执行前置处理方法 -> 执行初始化方法 -> 执行后置处理方法

4. 使用Bean对象

5. 销毁Bean对象

关闭容器的时候会销毁Bean对象
关闭容器:contex.close();
  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值