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

Spring-循环依赖

时间:2023-01-12 19:46:18浏览次数:56  
标签:缓存 对象 Spring 依赖 单例 spring new 循环

什么是循环依赖

两个不同的实体类,却拥有有着对方对象作为属性。
``

  1. A a = new A();
  2. a.b = new B(); a.c = new C();
  3. => B b = new B();
  4. b.a = new A()
  5. => C c = new C();
  6. C.a = new A()
    ``
    代码从上到下简单执行是没有问题的,1步与4步、2步与3步 会生成不同的对象。彼此之间没有直接联系。
    但 spring 创建对象时会存在问题。spring的单例模式会致使 1、2、3、4 步骤中所有的A对象相同,所有的B相同

循环依赖-创建对象的生命周期

多个对象相互依赖的情况下的脑图:https://note.youdao.com/s/b4YzOUUX
image

什么是单例池

单例池,就是spring三级缓存中的第一级缓存。保存创建完成且填充完成的对象。打破循环。

第三级缓存的作用

临时缓存器,存储的对象都是刚创建的,对象的属性并未开始填充。每个对象在创建之初都会存入到三级缓存中,在存入到第一级缓存后,删除数据。
主要作用:通过存储中lambad表达式,获取到对象,存储到 第二级缓存中

第二级缓存的作用

AOP,在spring factory中会创建一个代理对象。
第二缓存的主要意义在于,应对多个相互依赖的情况下,能够获取到相同的代理对象。
当然,第二级缓存也会存储普通对象,这在于是否使用 AOP。

标签:缓存,对象,Spring,依赖,单例,spring,new,循环
From: https://www.cnblogs.com/zz-1q/p/17007500.html

相关文章

  • SpringBoot简单整合JPA
    SpringBoot简单整合JPAhttps://blog.csdn.net/qq_41378597/article/details/103444889最近帮朋友写个小项目,用惯了Mybatis,有机会想用下SpringBoot整合JPA,发现使用JPA......
  • Springboot简单整合JPA示例
    Springboot整合JPAhttps://blog.csdn.net/wdy00000/article/details/123588201文章目录JPA技术常用注解Springboot整合JPA1.引入JPA依赖2.配置3.启动类4.实体类5.......
  • springboot 自动配置 自动监控demo
    1、注解定义@Target({java.lang.annotation.ElementType.METHOD})@Retention(RetentionPolicy.RUNTIME)@Documentedpublic@interfaceUmp{publicabstractSt......
  • Spring Boot 加载外部配置文件
    SpringBoot允许你从外部加载配置,这样的话,就可以在不同的环境中使用相同的代码。支持的外部配置源包括:Java属性文件、YAML文件、环境变量、命令行参数。用@Value注解可以......
  • IDEA的Services中添加SpringBoot启动和npm启动
    1、添加SpringBoot启动点击页面最下方Services,在弹出框中点击左上角最右侧的+,在点击RunConfigurationType,在弹出框AddConfigurationType中找到SpringBoot点击......
  • 【SpringBoot】配置篇
      POM.XML<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"......
  • 离线安装Python依赖包
    互联网电脑操作导出项目所需要的库安装pipreqspipinstallpipreqs项目目录下执行pipreqs./会生成requirements.txt文件,包含依赖包。pymongo==3.12.3下载离......
  • 形象化认识Spring Cloud相关组件
    一、整体认识Springframework架构的项目就像一栋高楼大厦,一栋大厦里租用者各色各样的公司和企业为用户提供各种各样的服务。大厦里的每间办公室都是一个容器,对应着一个dock......
  • LeetCode刷题(54)~两数之和【暴力循环/双哈希/单哈希】
    题目描述给定一个整数数组nums和一个目标值target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,数......
  • LeetCode刷题(49)~最长连续递增序列【双重循环/一次循环/滑动窗口】
    题目描述给定一个未经排序的整数数组,找到最长且连续的的递增序列,并返回该序列的长度。示例1:输入:[1,3,5,4,7]输出:3解释:最长连续递增序列是[1,3,5],长度为3......