前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Spring技术知识点总结之四——Spring Bean 的生命周期

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

作者头像
剑影啸清寒
发布2020-07-10 11:20:32
3060
发布2020-07-10 11:20:32
举报
文章被收录于专栏:琦小虾的Binary琦小虾的Binary

接上篇《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 销毁方法;
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-07-09 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 四. Spring Bean 的生命周期
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档