首页 > 其他分享 >【Spring】循环依赖

【Spring】循环依赖

时间:2023-05-08 20:13:38浏览次数:28  
标签:依赖 Spring Bean 循环 单例 spring

参考:

阿里开发者-Spring循环依赖那些事(有完整流程图)   https://mp.weixin.qq.com/s/cqkZEvmmh7jnNt2K5r_lXg   

 

问题:

1、什么是循环依赖?
2、为什么会产生循环依赖?
3、循环依赖有哪些场景?
4、Spring如何解决循环依赖的?
5、Spring为什么使用三级缓存?
6、Spring支持AOP循环依赖,为何还存在循环依赖异常?
7、Spring不支持的循环依赖场景及如何解决?

 

循环依赖:A->B->C->A

解决关键词:三级缓存

核心代码:org.springframework.beans.factory.support.DefaultSingletonBeanRegistry

  • private final Map<String, Object> singletonObjects = new ConcurrentHashMap<>(256);:  单例对象缓存池,beanName->Bean,其中存储的就是实例化,属性赋值成功之后的单例对象
  • private final Map<String, Object> earlySingletonObjects = new HashMap<>(16);:                 早期的单例对象,beanName->Bean,其中存储的是实例化之后,属性未赋值的单例对象。
  • private final Map<String, ObjectFactory<?>> singletonFactories = new HashMap<>(16);:     单例工厂的缓存,beanName->ObjectFactory

核心概念:

BeanDefinition:spring核心bean的配置信息
Spring Bean:spring管理的已经初始化好以后的可使用的实例
首先,通过spring通过扫描各种注解 @Compoent、@Service、@Configuration等等把需要交给spring管理的bean初始化成 BeanDefinition 的列表
然后,根据 BeanDefinition 创建spring bean的实例
Java Bean:Java简单通过构造函数创建的对象
Spring通过推断构造方法后,通过反射调用构造函数创建的对象

 

标签:依赖,Spring,Bean,循环,单例,spring
From: https://www.cnblogs.com/clarino/p/17382970.html

相关文章

  • Spring学习笔记专题二
    (1)注解1,注解的作用:给Java结构添加标记;2,注解的使用:使用注解一般需要三方面参与:1,注解类;2,需要标记的目标类型;3,用于处理目标类型的处理程序;3,Retention:把注解保留的时机1,SOURCE:保留在源代码级别,一般供编辑器级别使用2,CLASS:保留到字节码级别,一般用编译器使用3,RUNTIME:保留到运行......
  • 关于 mybatis-spring-boot-starter 的版本适配问题
    写在前面:本人就读于某不知名二本计科专业,目前大二,正在自学SpringBoot。博客中难免出现谬误,请大家批评指正,不喜勿喷,键盘侠手下留情。开发环境:IDEA2022.3.2JDK1.8SpringBoot2.7.11Maven3.9.0问题描述:最近在写一个SpringBoot项目,整合了Mybatis,在程序运行时出现如下报错......
  • java netty socket实例:报文长度+报文内容,springboot
    前言说实话,javanetty方面的资料不算多,尤其是自定义报文格式的,少之又少自己写了个简单的收发:报文长度+报文内容发送的话,没有写自动组装格式,自己看需求吧,需要的话,自己完善服务端启动可以直接用类文件启动,也可以通过springboot。我这里写的是用springboot启动的,可以自己按照需求自......
  • SpringBoot全局异常处理
    @ControllerAdvice:使用该注解表示开启了全局异常的捕获; 参考链接[1]https://www.cnblogs.com/xuwujing/p/10933082.html[2]https://gitee.com/bruce6213/global-exception-handler......
  • spring 配置https
    生成jks证书(请安装jdk)keytool-keystoremykeys.jks-genkey-aliasmyAlias-keyalgRSA自己生成的口令要记住,后面配置需要用到 然后把生成的jks文件复制到项目目录下,在spring配置文件(application.yml/application.properties)下进行对应ssl配置 ssl配置说明:......
  • spring3 mvc 效验例子
    Theapplicationwillpresentsimpleuserregistrationformtotheuser.Formwillhavethefollowingfields:1.UserName2.Age3.PasswordThevalidatorframeworkwillvalidatetheuserinput.Ifthereisanyvalidationerrorapplicationwilldisplayt......
  • 关于map或for自动停止循环的问题
    问题在维护一个老项目时发现map循环数组循坏到index为14时就自动不循环了(数组长度为79),并且也不运行后面的代码代码//问题代码awaituseMyFetch('url',{afterFetch(ctx){constresdata=safeParse(ctx.data)//json字符串转换为对象co......
  • 手动导入maven依赖
    1.下载jar包 去网站https://mvnrepository.com/找到对应依赖如下图自动导入失败 下完jar包找到jar包文件夹打开cmd 执行命令 mvninstall:install-file-Dfile=easyexcel-3.2.1.jar-DgroupId=com.alibaba-DartifactId=easyexcel-Dversion=3.2.1-Dpackagi......
  • DI依赖注入环境
    我还是在跟着狂神来学习Spring51.构造器注入2.Set方式注入【重点】3.扩展方式注入我在这里记录一下set依赖注入的步骤吧Set方式注入:分为依赖:bean对象的创建依赖于容器注入:bean对象中的所有属性,由容器来注入先放一下目录结构吧第一步:配置好实体类首先写了一些不同......
  • SpringBoot常用注解
    @SpringBootApplication@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)@Documented@Inherited@Configuration@EnableAutoConfiguration@ComponentScanpublic@interfaceSpringBootApplication{ /** *Excludespecificauto-configurationclas......