跳转到主内容
极星编程网:以代码为星,赴技术山海!

Spring的三级缓存,究竟是个啥玩意儿?

文章导读

大家好,我是苏承栈。今天我们来聊聊Spring框架中的三级缓存,这玩意儿虽然听起来复杂,但其实搞懂了,对理解Spring的运作机制非常有帮助。

Spring的三级缓存是什么?

Spring的三级缓存,从源码的角度看,其实就是三个Map。它们分别是:

  • 一级缓存:存放已经初始化好的bean实例。
  • 二级缓存:存放已经实例化但未初始化完的bean实例。
  • 三级缓存:存放bean的工厂方法。

Spring的三级缓存解决什么问题?

三级缓存主要是为了解决循环依赖问题。当Spring容器创建bean时,如果发现存在循环依赖,就会使用三级缓存来存储部分bean实例,从而避免循环依赖的发生。

/**
 * Return the (raw) singleton object registered under the given name.
 * 

Checks already instantiated singletons and also allows for an early * reference to a currently created singleton (resolving a circular reference). * @param beanName the name of the bean to look for * @param allowEarlyReference whether early references should be created or not * @return the registered singleton object, or {@code null} if none found */ @Nullable protected Object getSingleton(String beanName, boolean allowEarlyReference) { // ... 省略代码 ... }

为什么需要三级缓存?

三级缓存的存在主要有两个原因:一是为了解决循环依赖,二是为了延迟初始化。通过使用三级缓存,Spring可以在不牺牲性能的情况下,有效地解决循环依赖问题。

protected Object doCreateBean(final String beanName, final RootBeanDefinition mbd, final @Nullable Object[] args)
        throws BeanCreationException {
    // ... 省略代码 ...
}

总结与拓展

Spring的三级缓存是一个巧妙的设计,它不仅解决了循环依赖问题,还提高了Spring容器的性能。如果你对Spring框架感兴趣,建议深入研究一下它的源码,相信你会收获很多。

我是苏承栈,如果你对Spring框架还有其他疑问,欢迎访问极星编程网(www.jxgpc.com)了解更多内容。

相关文章