首页 > 其他分享 >spring 怎么解决循环依赖的

spring 怎么解决循环依赖的

时间:2023-12-13 15:37:34浏览次数:33  
标签:缓存 singletonFactories spring ObjectFactory bean 依赖 循环

spring 怎么解决循环依赖的

理解spring的生命周期

分为容器启动阶段、bean的实例化阶段、bean的属性注入阶段、bean的初始化阶段、bean的缓存阶段、bean的销毁阶段

怎么解决循环依赖

假设有两个对象 X和Y,X依赖了Y,Y依赖了X,spring能解决循环依赖,底层主要接住了3个map。
第一个是singletonObjects:缓存实例化好的bean
第二个是earlySingletonObjects:缓存半成品对象,多级循环依赖的社会化,不重复创建对象,提高效率
第三个是singletonFactories:缓存ObjectFactory对象
当在创建X对象的时候,会将lambda对象ObjectFactory放到singletonFactories中
后续进行属性注入的时候,发现需要注入Y,就需要去创建Y,当创建Y的时候,也会将对应的lambda对象ObjectFactory放到singletonFactories中
Y的生命周期继续往下走,然后填充属性的时候,发现需要填充X,就会从三级缓存去获取到ObjectFactory lambda表达式
执行表达式获取到半成品对象,在这个阶段,可以做很多扩展,比如AOP,提前完成代理
存到二级缓存earlySingletonObjects中
将X从三级缓存singletonFactories中移除
然后Y属性注入完成后,Y就创建完成了,
继续进行X属性填充,填充完后,X也创建完成

标签:缓存,singletonFactories,spring,ObjectFactory,bean,依赖,循环
From: https://www.cnblogs.com/hg-super-man/p/17899127.html

相关文章

  • 【转载】SpringBoot2.x使用Assert校验(非单元测试)
    参考https://blog.csdn.net/yangshangwei/article/details/123105926环境环境版本操作windows10JDK11Springboot2.3.12.RELEASE注意引入的包为importorg.springframework.util.Assert;介绍对象和类型断言函数说明notNull()假设对......
  • .NET 依赖注入的3中方式
    一、简介    依赖注入共有3种方式:构造函数注入、属性注入、方法注入二、构造函数注入    在program.cs中对组件进行注册:   builder.Services.AddScoped<IScopedService,ScopedService>();    服务注册配置后,在需要注入的类上使用构造函数。pu......
  • Day29 练习:打印三角形(For循环补充说明)
    练习:打印三角形packagecom.baixiaofan.struct;publicclassTestDemo01{publicstaticvoidmain(String[]args){//打印三角形五行/*for(表达式1;表达式2;表达式3){表达式4;}*///第一次循环:......
  • 使用 npm-check-updates 检查项目的 npm 依赖项是否有更新
    一、安装npm-check-updates:npminstall-gnpm-check-updates二、使用:在项目根目录运行以下命令,检查所有项目依赖项的最新版本:ncu执行结果如下:红色=主要升级青色=小幅升级绿色=补丁升级更新版本:ncu-u注意备份或者提交代码,确保包文件处于版本控制......
  • springboot+VUE——mybatis分页和Element Plus的分页组件实践
    分页只有基础的分页功能,跳转和动态选择每页展示多少条数据的功能可以参考ElementPlus的分页组件自行配置并且传入相应的方法即可!<scriptlang="ts"setup>/***分页变量数据*/constpagination=ref({ current_page:1, // 当前页码,此处默认为第一页 total_data:0......
  • 大公司为什么禁止在SpringBoot项目中使用@Autowired注解?
    Spring官方已不推荐使用Autowired字段/属性注入bean,一些大公司的新项目也明令禁止使用了。所以今天就来跟你们讲下spring框架可以使用的不同类型的依赖注入,以及每种依赖注入的适用情况。一、依赖注入的类型尽管针对springframerwork5.1.3的文档只定义了两种主要的依赖......
  • springboot-micrometer潜在oom问题解决办法
    在服务中起一个监听Prometheus拉取的线程,在拉取完成之后清理调meterMap中内容比较多的tag,我这边是清理调gateway.requests.代码如下:@ComponentpublicclassPrometheusMeterRegistryFactory{@ResourceprivatePrometheusMeterRegistryprometheusMeterRegistry;......
  • springboot+vue小白升级之路14-实现系统公告首页公告展示、springboot+vue小白升级之
    还是接着之前的内容,我把新增的功能代码贴出来,给大家参考学习。数据库droptableifexistsan_user;createtablean_user( idintnotnullauto_incrementprimarykeycomment'主键id', namevarchar(255)notnulluniquecomment'姓名', `password`varchar(255)notnu......
  • springboot+vue小白升级之路13-AOP实现登录、增删改查操作日志管理
    还是接着上一个的内容,我把这个新增的关于日志的功能代码都贴出来,供大家学习参考。数据库数据库droptableifexistsan_log;createtablean_log( idintnotnullauto_incrementprimarykeycomment'主键id', namevarchar(255)notnullcomment'操作内容', log_dateda......
  • springboot+vue小白升级之路06-实现文件上传和下载
    接着上一个的内容,代码我就不全部贴了,有变化的部分发一下springboot后端pojobook.javapackagecom.shrimpking.pojo;importjava.math.BigDecimal;importcom.baomidou.mybatisplus.annotation.TableName;importcom.baomidou.mybatisplus.annotation.IdType;importcom.baomid......