为什么要三级缓存?⼆级不⾏吗?

不行,主要是为了生成代理对象。如果没有代理的情况下,使用二级缓存解决循环依赖是可行的。但是如果存在代理,二级缓存就无法解决循环依赖的问题。

在三级缓存中,存放的是生成具体对象的匿名内部类。当获取对象时,它可以生成代理对象,也可以返回普通对象。使用三级缓存的主要目的是确保在任何时候都使用同一个对象。

假设只有二级缓存的情况,将一个普通的Bean对象放入二级缓存中。在Bean初始化过程中,通过BeanPostProcessor生成代理对象,并覆盖二级缓存中的普通Bean对象。这可能导致获取的Bean对象不一致。

因此,为了解决循环依赖问题并生成代理对象,Spring使用三级缓存来确保对象的一致性。

spring-6ece8a46-25b1-459b-8cfa-19fc696dd7d6.png

标签: java, Java面试题, Java问题合集, Java编程, Java问题精选, Java常见问题