spring如何解决循环依赖
所属分类 spring
浏览量 1022
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 singletonObjects = new ConcurrentHashMap(256);
// Cache of singleton factories: bean name --> ObjectFactory
private final Map> singletonFactories = new HashMap>(16);
// Cache of early singleton objects: bean name --> bean instance
private final Map earlySingletonObjects = new HashMap(16);
如果没有AOP ,两级缓存就可以解决循环依赖
否则每次执行singleFactory.getObject() 都会产生一个新的代理对象
使用缓存来保存代理对象
spring循环依赖实例
spring构造注入优缺点
上一篇
下一篇
springboot获取内置tomcat端口
关于流计算的若干想法
SpringBoot admin 简介
Spring的BeanFactoryPostProcessor和BeanPostProcessor
yaml 和 properties 互相转换
springboot应用首次访问慢解决方法