Spring 三级缓存的原理

Spring框架采用三级缓存管理单例对象,包括singletonObjects(已创建的实例)、earlySingletonObjects(已创建未注入的实例)和singletonFactories(创建实例的工厂)。这一机制提高了对象获取效率,避免了重复创建,优化了应用性能。
摘要由优快云通过智能技术生成

Spring框架中的三级缓存是指Bean的单例对象(Singleton Object)的缓存,分为singletonObjects、earlySingletonObjects和singletonFactories三个缓存。

  1. singletonObjects缓存:存放已经创建的单例对象实例,是第一级缓存。当一个单例对象被创建后,会被放入该缓存中。如果需要获取该单例对象实例,会首先从该缓存中查找。如果存在,则直接返回;否则,进入第二级缓存。

  2. earlySingletonObjects缓存:存放已经创建但是尚未被扫描注入到其他bean中的单例对象实例,是第二级缓存。当一个单例对象被创建后,会被放入该缓存中。如果需要获取该单例对象实例,会首先从该缓存中查找。如果存在,则直接返回;否则,进入第三级缓存。

  3. singletonFactories缓存:存放创建单例对象实例的工厂类,是第三级缓存。当一个工厂类被创建后,会被放入该缓存中。如果需要获取该工厂类,会首先从该缓存中查找。如果存在,则直接返回;否则,创建一个新的工厂类实例并放入该缓存中。

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

  1. 当创建一个单例对象实例时,Spring会将其放入singletonObjects缓存中。

  2. 当需要获取单例对象实例时,Spring会先从singletonObjects缓存中查找。如果存在,则直接返回;否则,进入第二级缓存。

  3. 当需要获取单例对象实例并且在第二级缓存中没有找到时,Spring会继续查找,直到找到或者遍历完所有的单例对象实例为止。这个过程就是“扫描”的过程。

  4. 当完成单例对象实例的扫描后,Spring会将所有扫描到的单例对象实例放入singletonFactories缓存中。这样,下次再需要创建单例对象实例时,就可以直接从singletonFactories缓存中获取对应的工厂类实例了。

总之,Spring框架的三级缓存通过将单例对象实例和工厂类实例分别存放在不同的缓存中,实现了对单例对象的高效管理。同时,通过使用三级缓存,可以避免重复创建单例对象实例和工厂类实例,提高了应用程序的性能和效率。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值