首页  

spring如何解决循环依赖     所属分类 spring 浏览量 844
Spring 解决循环依赖的两个前提条件
非构造注入循环依赖
单例

单例对象的初始化 
createBeanInstance   实例化
populateBean         填充属性
initializeBean

三级缓存 

earlySingletonObjects  早期曝光的单例对象
singletonFactories     单例的工厂对象
singletonObjects       已经实例化完成的对象


递归获取目标bean及其依赖的bean
先实例化再注入属性

非单例 或 构造函数 循环依赖 无解


org.springframework.beans.factory.support.DefaultSingletonBeanRegistry

// Cache of singleton objects: bean name --> bean instance 
private final Map<String, Object> singletonObjects = new ConcurrentHashMap<String, Object>(256);

// Cache of singleton factories: bean name --> ObjectFactory 
private final Map<String, ObjectFactory<?>> singletonFactories = new HashMap<String, ObjectFactory<?>>(16);

// Cache of early singleton objects: bean name --> bean instance 
private final Map<String, Object> earlySingletonObjects = new HashMap<String, Object>(16);




如果没有AOP ,两级缓存就可以解决循环依赖
否则每次执行singleFactory.getObject() 都会产生一个新的代理对象
使用缓存来保存代理对象






spring循环依赖实例 spring构造注入优缺点

上一篇     下一篇
springboot获取内置tomcat端口

关于流计算的若干想法

SpringBoot admin 简介

Spring的BeanFactoryPostProcessor和BeanPostProcessor

yaml 和 properties 互相转换

springboot应用首次访问慢解决方法