上面就是springBean的大致生命周期。

Bean的创建过程

创建Bean之前会调用Bean工厂的后置处理器,可以获取到BeanDefinition

Bean的初始化过程

初始化之前会调用前置处理器,可以获取到BeanName和Bean实例

初始化之后会调用后置处理器,也是可以获取到BeanName和Bean实例,可以做一些属性的更改等

Bean的初始化也就是注入属性,这里会涉及到循环依赖的问题。spring默认是开启循环依赖的。

例如A依赖B,B依赖A

  1. 当创建A对象的时候,会调用getBeanSington()方法,也就是去单例池中查找有没有A的Bean,A还没创建成功,肯定没有。
  2. 调用下一个getBeanSington()方法,判断A对象是否正在被创建,也就是去查找set集合中有没有A对象,这时候也没有,然后将A加入set集合中
  3. 判断是否支持循环依赖,是否是单例,是的话将A放入singltonFactors也就是第二个map,其实这儿存的是一个工厂,后面就是通过这个工厂获取对象的
  4. 开始注入属性B
  5. 也是先去单例池中查找有没有B的Bean,也没有
  6. 判断B对象是否正在被创建,这时候也没有被创建,将B加入set集合中
  7. 判断是否支持循环依赖,是否是单例,是的话放入第二个map中,此时map中已经有A和B
  8. B也开始注入属性A
  9. 去单例池获取A的Bean,没有获取到
  10. 去set集合中获取A对象,获取到了,说明A正在被创建
  11. 去第二个map中获取到A的工厂,然后获取到对象,如果A对象做了代理,就会在这儿进行代理
  12. B对象注入属性A完成,如果B对象也做了代理的话,会再初始化完成之后进行AOP
  13. A对象此时就能从单例池中获取到B对象
  14. A对象万层初始化。

SpringBean的生命周期以及循环依赖过程的更多相关文章

  1. SpringBean的生命周期 以及一些问题总结

    SpringBean的生命周期 一.传统 Bean 的生命周期 new实例化: 可使用了 无引用时,GC回收. 二.Servlet 的生命周期 实例化Servlet对象: init初始化对象: 相应客 ...

  2. 面试刷题30:SpringBean的生命周期?

    spring是Java软件开发的事实标准. 我是李福春,我在准备面试,今天的问题是:springBean的生命周期是怎样的? 答:spring最基础的能力是IOC(依赖注入),AOP(面向切面编程), ...

  3. 一步步实现:springbean的生命周期测试代码

    转载. https://blog.csdn.net/baidu_37107022/article/details/76552052 1. 创建实体SpringBean public class Spr ...

  4. 【Java面试宝典】说说你对 Spring 的理解,非单例注入的原理?它的生命周期?循环注入的原理, aop 的实现原理,说说 aop 中的几个术语,它们是怎么相互工作的?

    AOP与IOC的概念(即spring的核心) IOC:Spring是开源框架,使用框架可以使我们减少工作量,提高工作效率并且它是分层结构,即相对应的层处理对应的业务逻辑,减少代码的耦合度.而sprin ...

  5. Vue2.0的变化 ,组件模板,生命周期,循环,自定义键盘指令,过滤器

    组件模板: 之前: <template> <h3>我是组件</h3><strong>我是加粗标签</strong> </templat ...

  6. 3.3 Spring5源码---循环依赖过程中spring读取不完整bean的最终解决方案

    根据之前解析的循环依赖的源码, 分析了一级缓存,二级缓存,三级缓存的作用以及如何解决循环依赖的. 然而在多线程的情况下, Spring在创建bean的过程中, 可能会读取到不完整的bean. 下面, ...

  7. spring-bean(全生命周期)

    作用:在初始化和销毁bean时候,做一些处理工作是调用生命周期方法 格式: <bean id=”该生命周期的名称” class=”提供方法的类的全路径” init-methood=”init” ...

  8. Spring IOC容器对bean的生命周期进行管理的过程

    1.通过构造器或者工厂方法创建bean的实例 2.为bean的属性设置值和对其他bean的引用 3.将bean的实例传递给bean的后置处理器BeanPostProcessor的postProcess ...

  9. springbean的生命周期

    1.Spring对Bean进行实例化(相当于程序中的new Xx())2.Spring将值和Bean的引用注入进Bean对应的属性中3.如果Bean实现了BeanNameAware接口,Spring将 ...

随机推荐

  1. 关于xshell和文件传输相关

    Xshell连接linux系统 下载Xshell后启动软件 不能连接,没有弹出输入账户和密码时在linux中执行 然后再次执行Xshell 连接成功 文件传输 点击Xshell的文件传输 会引导你去安 ...

  2. BIM人才三角

    BIM 人才三角聚焦六个关键技能和一个中心. 1. 基础能力 基础能力分三块: 语言能力 实践能力 数学能力 1.1 语言能力 语言是指自然语言,如汉语和英语.获取其他知识的能力以及学习.理解.沟通能 ...

  3. oracle卸载步骤

    一.删除产品 1. 停服务,进入下图,一个个删除Oracle产品,再执行卸载 二.清注册表,开始-搜索- 输入regedit,进入注册表 1.选择HKEY_LOCAL_MACHINE\SOFTWARE ...

  4. geoserver发布地图服务

    1.      Geoserver启动 blog.csdn.net 2014-09-18 20:30 Geoserver是著名的开源GIS软件之一.也是项目中常用的地图服务软件.基于geoserver ...

  5. 问题 C: 查找

    #include <cstdio> #include <vector> #include <algorithm> using namespace std; bool ...

  6. 《UNIX环境高级编程》源码配置——apue.3e 安装

    转载从:http://blog.csdn.net/songshimvp1/article/details/51440545 网上大都是针对UNIX高级编程第二版的头文件搭建,现在对于第三版来说有些过时 ...

  7. P5331 [SNOI2019]通信 [线段树优化建图+最小费用最大流]

    这题真让人自闭-我EK费用流已经死了?- (去掉define int long long就过了) 我建的边害死我的 spfa 还是spfa已经死了? 按费用流的套路来 首先呢 把点 \(i\) 拆成两 ...

  8. 《NVM-Express-1_4-2019.06.10-Ratified》学习笔记(5.23)-- Format NVM command

    5.23 Format NVM command - NVM Command Set Specific Format NVM命令用于低级格式化NVM媒介.这个命令被host主机使用,来变更LBA数据大小 ...

  9. Failed to set locale, defaulting to C

    echo "export LC_ALL=en_US.UTF-8" >> /etc/profile source /etc/profile 没有设置local环境

  10. PHP获取小程序码并返回前端显示图片

    小程序的二维码分为小程序码和二维码: 生成小程序二维码文档中说后端来生成. 参考 小程序开发文档资料:https://developers.weixin.qq.com/miniprogram/dev/ ...