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

私人网站管理软件阿里巴巴电子商务网站

私人网站管理软件,阿里巴巴电子商务网站,移动端网站如何做开放式配,大兴网站定制开发1、Spring三级缓存是什么,过程是怎么样的? Spring 中的三级缓存主要用于单例 Bean 的生命周期管理,特别是在循环依赖时,它通过不同阶段暴露 Bean 实例来确保依赖注入的顺利完成。缓存的内容如下: 一级缓存 (singleton…

1、Spring三级缓存是什么,过程是怎么样的?

Spring 中的三级缓存主要用于单例 Bean 的生命周期管理,特别是在循环依赖时,它通过不同阶段暴露 Bean 实例来确保依赖注入的顺利完成。缓存的内容如下:

  1. 一级缓存 (singletonObjects)存储完全初始化的单例 Bean。该缓存中存储的是已经完成初始化的 Bean 对象,包括所有的属性注入和生命周期回调方法(如 @PostConstruct)都已完成。

  2. 二级缓存 (earlySingletonObjects)存储实例化但尚未完成所有初始化步骤的 Bean 引用。也就是 Bean 已经完成了实例化,并完成了依赖注入(如字段注入),但可能还没有执行初始化方法(如 @PostConstruct)。二级缓存用于解决循环依赖问题,当需要注入的 Bean 还没有完全初始化时,可以先返回该 Bean 的早期引用。

  3. 三级缓存 (singletonFactories)存储的是创建 Bean 的工厂(ObjectFactory),而不是直接存储 Bean 实例。这些工厂延迟返回真正的 Bean 实例,直到它们完成初始化。三级缓存用于处理 循环依赖 的核心,当一个 Bean 处于创建过程中,另一个 Bean 依赖它时,可以从三级缓存中获取一个工厂对象,该工厂会在 Bean 完全初始化后,生成一个完整的 Bean 实例。

2、从缓存中获取单例对象

2.1、代码解读

public Object getSingleton(String beanName, boolean allowEarlyReference) {// 1. 检查一级缓存,获取已完成初始化的 BeanObject singletonObject = this.singletonObjects.get(beanName);if (singletonObject == null && this.singletonsCurrentlyInCreation.contains(beanName)) {// 2. 如果一级缓存没有,且 Bean 正在创建中,则检查二级缓存singletonObject = this.earlySingletonObjects.get(beanName);if (singletonObject == null && allowEarlyReference) {// 3. 如果二级缓存也没有,允许提前引用时,检查三级缓存ObjectFactory<?> singletonFactory = this.singletonFactories.get(beanName);if (singletonFactory != null) {// 4. 从三级缓存中获取 Bean 实例singletonObject = singletonFactory.getObject();// 5. 将生成的对象放入二级缓存this.earlySingletonObjects.put(beanName, singletonObject);// 6. 从三级缓存中移除工厂this.singletonFactories.remove(beanName);}}}// 7. 返回从缓存中获取的单例对象return singletonObject;
}

2.2、执行流程

  1. 一级缓存 (singletonObjects):
    检查一级缓存,获取完全初始化的 Bean。
    如果一级缓存中存在该对象,则直接返回。

  2. 二级缓存 (earlySingletonObjects):
    如果一级缓存中没有找到该对象,且该对象正在创建过程中(this.singletonsCurrentlyInCreation),则检查二级缓存。
    如果二级缓存中存在早期暴露的 Bean,则直接返回。

  3. 三级缓存 (singletonFactories):
    如果二级缓存中也没有,并且允许提前引用(allowEarlyReference 为 true),则从三级缓存中获取工厂对象(ObjectFactory)。
    调用 ObjectFactory.getObject() 方法生成 Bean 实例。
    将生成的实例放入二级缓存,同时从三级缓存中移除对应的工厂。

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

相关文章:

  • 如何建设一个门户网站单页销售网站源码
  • 公司网站建设计入什么费用咸阳营销型网站建设
  • 网站首页做30个关键词沧州营销型网站建设
  • 企业门户网站属于什么层网站建设和网络优化
  • 网站建设技术质量指标网站设计软件免费下载
  • 网站请人做要多少钱wap站
  • 化妆品网站建设方案的预算市场营销培训
  • 接网站建设单子注意事项海南中小企业网站建设
  • 网页制作与网站建设 在线作业wordpress怎样添加版权名
  • 南宁网站建设专业品牌上海市建设教育网站
  • 平台网站建设预算表正规软件开发培训学校
  • 怎么下载网站的模板郑州做网站找维诺
  • 怎么找个人搭建网站济南网站建设代码
  • 免费自助设计网站网站建设推广是什么意思
  • 网站排名恢复购物商城网页模板
  • 我想建设一个算命网站网站建设目标是
  • 禅城区建网站公司斯特云流量网站
  • wordpress抽奖源码东莞seo站内优化
  • 网站建设策划怎么沟通php做网站还是linux
  • 电子商务网站建设要多少钱湖南智能网站建设报价
  • 小公司建设网站成都网站建设需要多少钱
  • 查看网站dns服务器网站备案忘记密码怎么办
  • 定制网站和模板建站哪个好用兰州网站排名外包
  • 大连做网站公司visio做网站效果
  • seo关键词搜索优化江门seo推广优化
  • 国外产品展示网站模板济南网站建设开发公司
  • 原子艺术做的网站怎么样子普陀区网站建设公司
  • 成都本地做网站的大都会的同行码怎么用
  • 一个网站有个前端后端怎么做做搜狗pc网站排
  • 国内网站空间 优帮云常见的网站开发语言