- 一级缓存:存储完整Bean
- 二级缓存:防止AOP时DP对象被重复创建
三级缓存:防止循环依赖,实际上是函数式接口,不会被立刻调用
仅解决依赖,一级缓存足矣,但不能避免并发状况下获取不完整bean的问题
- 二级缓存可以解决上述问题,但无法解决多次循环依赖情况下重复创建动态代理的问题
若干多例bean能否解决循环依赖?
不能,
理论上因为不能确定一个实例依赖另一类实例中的具体哪一个。
事实上多例bean不会使用缓存没有无参构造函数是能否解决循环依赖?
不能,因为构造函数循环依赖也会报错,循环依赖的解决倚仗与拿到早期未初始化的、不完整的bean对象做占位用,但构造函数期望拿到完整的bean,所以必然不能循环依赖。
但能通过为构造函数添加@Lazy注解实现循环依赖
