Spring技术知识点总结之四——Spring Bean 的生命周期

26 篇文章 0 订阅
10 篇文章 0 订阅

接上篇《Spring技术知识点总结之三——Spring Bean 的注入过程》

四. Spring Bean 的生命周期

BeanFactory 中 Bean 的生命周期:

  • 实例化:以 InstantiationAwareBeanPostProcessor 接口方法为包装,进行实例化过程。该接口主要功能有三个:实例化前预处理、实例化后预处理、设置属性值预处理;
    • 实例化前预处理:InstantiationAwareBeanPostProcessor # postProcessBeforeInstantiation();
    • 实例化
    • 实例化后预处理:InstantiationAwareBeanPostProcessor # postProcessAfterInstantiation();
  • 填充属性值:同样以 InstantiationAwareBeanPostProcessor 接口方法为包装;
    • 设置属性值预处理:InstantiationAwareBeanPostProcessor # postProcessPropertyValues();
    • 设置属性值
      • 注:循环依赖问题的解决在该部分实现。具体过程见前面的解析;
      • 注:只有 Singleton 允许循环依赖;Prototype 的 Bean 在发现循环依赖会抛出异常;
  • 初始化:进行一系列初始化接口 (比如用于预处理 Bean 的 BeanPostProcessor 接口等) 的方法,完成初始化;
    • 设置 BeanName: BeanNameAware # setBeanName();
    • 设置 BeanFactoryName: BeanFactoryNameAware # setBeanFactoryName();
    • (对于 ApplicationContext) 设置应用上下文 (ApplicationContext): ApplicationContextAware # setApplicationContext;
    • 初始化前预处理:BeanPostProcessor # postProcessBeforeInstantiation();
    • 初始化接口方法:InitializingBean # afterPropertiesSet();
    • XML init-method 初始化方法;
    • 初始化后预处理:BeanPostProcessor # postProcessAfterInstantiation();
    • 注:
      • Spring AOP 的功能就是基于 BeanPostProcessor 实现的;
  • 生命周期管理:Spring Bean 的生命周期有单例 (Singleton) 与复数 (Prototype) 两种(WebApplicationContext 又添加了其他三种);只有 Singleton 有缓存管理的功能;
    • prototype: 构造完毕之后直接返回,Spring 不再管理该 Bean 的生命周期;
    • singleton: 将构造完成的 Bean 放入 Spring IoC 的缓存池中,将该 Bean 的引用返回给调用者,Spring 继续对该 Bean 进行生命周期的管理。
  • 销毁:容器销毁时对 Bean 执行的操作;
    • DisposableBean # afterPropertiesSet();
    • XML destroy-method 销毁方法;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值