spring 三级缓存

spring 三级缓存

Spring三级缓存是Spring框架用来解决循环依赖问题的一种机制,它包含三级缓存:singletonObjects、earlySingletonObjects和singletonFactories。

  1. singletonObjects缓存:用来存放已经完全初始化的单例Bean实例,也就是最终被返回的单例Bean实例。在缓存中,Bean的名字和Bean实例是以键值对的形式存在的。
  2. earlySingletonObjects缓存:用来存放已经创建,但还未完成初始化的单例Bean实例。这些Bean实例通常是因为依赖其他Bean实例而无法完成初始化,处于不完整状态。
  3. singletonFactories缓存:用来存放Bean实例的工厂对象,这些工厂对象可以用来创建单例Bean实例。当Bean实例处于循环依赖关系时,Spring框架会先创建一个用于创建Bean实例的工厂对象,放到singletonFactories缓存中。

三级缓存的实现原理如下:

  1. 当Spring容器创建Bean时,首先会从singletonObjects缓存中查找Bean实例,如果能找到则直接返回。
  2. 如果在singletonObjects缓存中没有找到Bean实例,则从earlySingletonObjects缓存中查找,如果找到了一个未完成初始化的Bean实例,则将其返回,并在后续的处理中完成初始化。
  3. 如果在earlySingletonObjects缓存中也没有找到Bean实例,则从singletonFactories缓存中查找是否存在创建Bean实例的工厂对象,如果存在,则通过工厂对象创建一个新的Bean实例,并将工厂对象从singletonFactories缓存中移除。
  4. 如果在singletonFactories缓存中也没有找到工厂对象,则需要创建一个新的工厂对象,并放到singletonFactories缓存中,以便后续使用。
  5. 创建Bean实例时,如果Bean存在循环依赖,那么Spring框架会先创建一个用于创建Bean实例的工厂对象,放到singletonFactories缓存中。然后通过工厂对象创建一个新的Bean实例,并将其放到earlySingletonObjects缓存中,以便后续处理。

通过这种方式,Spring框架能够解决循环依赖问题,同时提高了Bean实例的创建效率,避免了重复创建Bean实例的情况。但是,如果应用程序中存在过多的循环依赖,会导致三级缓存占用大量内存,从而影响应用程序的性能和稳定性。因此,在应用程序设计中,应该尽可能避免过多的循环依赖。
循环依赖

  • 5
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值