从spring源码层面分析循环依赖解决方案的实现原理(中)

简介: 从spring源码层面分析循环依赖解决方案的实现原理(中)

执行finishBeanFactoryInitialization

image.png

执行preInstantiateSingletons

preInstantiateSingletons方法中的

List<String> beanNames = new ArrayList<>(this.beanDefinitionNames);

里面就包含xml定义的a和b这两个bean。


image.png

a和b没有明显的创建顺序。

在创建对象的整个过程中有6个重要且标准的方法。

image.png

以do开始的方法基本上是实际干活的方法,包含了非常多的真实的处理逻辑。

创建任何对象之前都要先做一个预判,判断容器里面是否有该对象。

image.png

查询容器中是否包含a对象,返回null,说明容器中还没有,所以只能创建。

然后进入第三个方法createBean

image.png

这段代码就是ObjectFactory,lambda表达式就是ObjectFactory的调用过程。

createBean并不会真正的执行lambda表达式,而是在调用getObject方法的时候才会执行lambda表达式。

在getSingleton方法中会调用getObject方法

image.png

image.png

image.png

如果一级缓存不存在该对象,则将key=a,value=lambda表达式放入三级缓存。

在对象属性设置之前,已经把K=a,value=lambda表达式放入了三级缓存,注意这里放入的并不是a对象,而是包含a对象的lambda表达式。

接下来就是填充对象属性,给属性赋值。

image.png

image.png

这是第二次看到getBean了。

本来是要给a中的b属性赋值的,通过名称判断之后,发现没有b对象,所以要去容器中查找b对象即对应到标红的这一步。

image.png

然后又经过上述一系列的步骤,实例化了B对象,属性a为null。

然后接着把key=b,value=lambda表达式放入三级缓存,然后给b的属性值a赋值

image.png

image.png

目录
打赏
0
0
0
0
19
分享
相关文章
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
109 2
建筑施工一体化信息管理平台源码,支持微服务架构,采用Java、Spring Cloud、Vue等技术开发。
智慧工地云平台是专为建筑施工领域打造的一体化信息管理平台,利用大数据、云计算、物联网等技术,实现施工区域各系统数据汇总与可视化管理。平台涵盖人员、设备、物料、环境等关键因素的实时监控与数据分析,提供远程指挥、决策支持等功能,提升工作效率,促进产业信息化发展。系统由PC端、APP移动端及项目、监管、数据屏三大平台组成,支持微服务架构,采用Java、Spring Cloud、Vue等技术开发。
Spring Boot 自动配置机制:从原理到自定义
Spring Boot 的自动配置机制通过 `spring.factories` 文件和 `@EnableAutoConfiguration` 注解,根据类路径中的依赖和条件注解自动配置所需的 Bean,大大简化了开发过程。本文深入探讨了自动配置的原理、条件化配置、自定义自动配置以及实际应用案例,帮助开发者更好地理解和利用这一强大特性。
106 14
图解 Spring 循环依赖,一文吃透!
Spring 循环依赖如何解决,是大厂面试高频,本文详细解析,建议收藏。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
图解 Spring 循环依赖,一文吃透!
Spring Core核心类库的功能与应用实践分析
【12月更文挑战第1天】大家好,今天我们来聊聊Spring Core这个强大的核心类库。Spring Core作为Spring框架的基础,提供了控制反转(IOC)和依赖注入(DI)等核心功能,以及企业级功能,如JNDI和定时任务等。通过本文,我们将从概述、功能点、背景、业务点、底层原理等多个方面深入剖析Spring Core,并通过多个Java示例展示其应用实践,同时指出对应实践的优缺点。
64 14
Spring面试必问:手写Spring IoC 循环依赖底层源码剖析
在Spring框架中,IoC(Inversion of Control,控制反转)是一个核心概念,它允许容器管理对象的生命周期和依赖关系。然而,在实际应用中,我们可能会遇到对象间的循环依赖问题。本文将深入探讨Spring如何解决IoC中的循环依赖问题,并通过手写源码的方式,让你对其底层原理有一个全新的认识。
64 2
Spring AOP 底层原理技术分享
Spring AOP(面向切面编程)是Spring框架中一个强大的功能,它允许开发者在不修改业务逻辑代码的情况下,增加额外的功能,如日志记录、事务管理等。本文将深入探讨Spring AOP的底层原理,包括其核心概念、实现方式以及如何与Spring框架协同工作。
SpringBoot集成Shiro权限+Jwt认证
本文主要描述如何快速基于SpringBoot 2.5.X版本集成Shiro+JWT框架,让大家快速实现无状态登陆和接口权限认证主体框架,具体业务细节未实现,大家按照实际项目补充。
38 11
Spring Boot 3 集成 Spring Security + JWT
本文详细介绍了如何使用Spring Boot 3和Spring Security集成JWT,实现前后端分离的安全认证概述了从入门到引入数据库,再到使用JWT的完整流程。列举了项目中用到的关键依赖,如MyBatis-Plus、Hutool等。简要提及了系统配置表、部门表、字典表等表结构。使用Hutool-jwt工具类进行JWT校验。配置忽略路径、禁用CSRF、添加JWT校验过滤器等。实现登录接口,返回token等信息。
134 12