单例set方法(包括成员变量)循环依赖,spring会利用三级缓存解决,无需额外配置
一级缓存放成品对象
二级缓存放发生了循环依赖时的产品对象(可能是原始bean,可能是代理bean)
三级缓存放工厂对象,发生循环依赖时,会调用工厂方法获取产品
spring期望在初始化阶段创建代理,但如果发生了循环依赖,会由工厂提前创建代理,后续初始化不必重复创建代理
二级缓存意义在于,如果提前创建了代理对象,在最后阶段需要从二级缓存中获取此代理对象,作为最终结果
构造方法和多例循环依赖解决办法
@Lazy
@Scope
ObjectFactory 或者 ObjectProvider
Provider(非spring中的方法)