当前位置: 首页 > news >正文

洛阳制作网站的公司课程网站的设计

洛阳制作网站的公司,课程网站的设计,wordpress 让百度收录,肉菜配送网站建设Spring为什么要用三级缓存解决循环依赖? 1. Spring是如何创建一个bean对象2. Spring三级缓存2.1 一级缓存:单例池,经历过完整bean生命,单例Bean对象2.2 二级缓存:提前暴露的Bean2.3 三级缓存:打破循环 3. S…

Spring为什么要用三级缓存解决循环依赖?

    • 1. Spring是如何创建一个bean对象
    • 2. Spring三级缓存
      • 2.1 一级缓存:单例池,经历过完整bean生命,单例Bean对象
      • 2.2 二级缓存:提前暴露的Bean
      • 2.3 三级缓存:打破循环
    • 3. Spring 解决不了的循环依赖
    • 4.总结

1. Spring是如何创建一个bean对象

  1. 推断构造方法
    默认采用无参构造,如果不存在无参构造,判断有参构造受否唯一,如果唯一选择有参构造,不唯一报错。

  2. 普通对象

  3. 依赖注入

  4. 初始化前(@PostConstruct)
    在类中方法上添加@PostConstruct注解,该方法会在初始化前执行。

  5. 初始化(InitializingBean)
    类实现InitializingBean接口,重写afterPropertiesSet方法。

  6. 初始化后(AOP)

  7. 代理对象

  8. 放入Map单例池

  9. Bean对象

2. Spring三级缓存

在这里插入图片描述

通过分析源码:
doCreateBean方法

2.1 一级缓存:单例池,经历过完整bean生命,单例Bean对象

private final Map<String, Object> singletonObjects = new ConcurrentHashMap<>(256);

2.2 二级缓存:提前暴露的Bean

private final Map<String, Object> earlySingletonObjects = new HashMap<>(16);

2.3 三级缓存:打破循环

private final Map<String, ObjectFactory<?>> singletonFactories = new HashMap<>(16);

//<beanName, 单例创建的工厂>

在创建bean 的源码中先判断是否是单例,支持循环依赖,当前正在创建的单例, 满足上面条件就会创建一个lambda表达式放入三级缓存中。
getEarlyBeanReference方法中会判断是否存在AOP,存在就创建代理对象,不存在就返回通过构造方法创建的普通对象。

在这里插入图片描述
在三级缓存lambda方法中判断是否创建代理对象
在这里插入图片描述

上边源码中看到只要走三级缓存的会调用getEarlyBeanReference方法,该方法会把执行过AOP的Bean存放在earlyProxyReferences的Map集合中,用于后续bean生命周期的初始化后是否AOP创建代理对象校验。

在这里插入图片描述

初始化后,校验是否AOP创建代理对象,通过校验earlyProxyReferences集合中bean是否与传入bean相同来判断。

在这里插入图片描述

获取单例bean
在这里插入图片描述

3. Spring 解决不了的循环依赖

1.构造器循环依赖(实例化阶段循环依赖) 解决办法添加@Lazy注解
底层原理是创建代理对象,
在这里插入图片描述

4.总结

在Java Spring的厨房里,循环依赖这道菜可是让不少程序员大厨头疼的“黑暗料理”。但Spring大厨微微一笑,不慌不忙地亮出了他的秘密武器——三级缓存“时光机”!
一级缓存,那是“秒出”区,新鲜出炉的Bean直接上桌,快得就像外卖小哥的闪电送。
二级缓存,咱们叫它“半成品天堂”,Bean们在这里稍作休息,等待最后的调味。但别急,好戏还在后头!
重头戏来了,三级缓存——“未来豆预测局”!这里,Spring大厨仿佛拥有了预知未来的超能力,提前把即将诞生的Bean们“画”在纸上,等它们真正诞生时,直接对号入座,无缝衔接。这操作,简直比科幻电影还炫酷!
就这样,Spring大厨用三级缓存的“时光机”,轻松玩转循环依赖这道难题,让厨房里的Bean们手拉手也能和谐共处,共同烹饪出美味的应用大餐。程序员们纷纷点赞:“Spring大厨,你是我们的超级英雄!”

在这里插入图片描述

http://www.yayakq.cn/news/403648/

相关文章:

  • h5制作网站公司嘉定网站设计制作报价
  • 网站如何做抖音推广网页版qq农场登录入口
  • 网站原创文章规范淄博周村网站建设哪家好
  • 搭建租号网的网站免费网站的app
  • 2015网站备案教程网页设计与网站开发
  • 手机网站淘宝客怎么做免费saascrm
  • 阳泉 网站建设合作南京创网网络技术有限公司
  • 做网站 乐清给几个网站谢谢
  • 中山高端网站建设公司移动无线宽带怎么续费
  • 网站开发和界面的区别wordpress伪静态html
  • 川沙网站建设怎么用云校建设学校网站
  • 武威做网站的公司太仓住房和城乡建设局网站
  • 建设网站服务器怎么弄网站集约化建设 要求
  • 建设网站怎样提要求2024年度关键词
  • 餐饮公司网站建设策划书网站左侧悬浮导航代码
  • 新建门户网站的建设自查百度商桥代码怎么添加到网站
  • 免费网站排名优化在线溧阳网站建设报价
  • 重庆网站设计开发网站开发好学
  • 广东网站建设公司艺术字体在线生成器转换器
  • 模板网站建设的公司wordpress 4.9.5 太卡
  • 网站建设模板哪里有pinterest官网入口
  • golang 网站开发 开源一级a做片免费网站
  • 网站建设商业金泉网做网站电话
  • 北京金企鹅网站建设方案手机网站图片自适应
  • 北京顺义去哪找做网站的做水果的有什么网站
  • 南宁网红打卡景点坚决贯彻落实二十条优化措施
  • 盈利型网站网站点击按钮排序
  • 怎么做自己的企业网站企业营销策划有限公司
  • 杭州建设行业网站金湖县住房和城乡建设局网站
  • 电影网站做流量查询公司水利平台网站