网站成功案例设计,自己做网站需要学什么东西,濮阳做网站的,wordpress积分主题Spring的循环依赖 ObjectFactory:函数式接口#xff0c;可以将lambda表达式作为参数放在方法的实参种#xff0c;在方法执行的时候#xff0c;并不会实际的调用当前lambda表达式#xff0c;只有在调用getObject方法的时候才回去调用lambda表达式 为什么spring要用三级缓存…Spring的循环依赖 ObjectFactory:函数式接口可以将lambda表达式作为参数放在方法的实参种在方法执行的时候并不会实际的调用当前lambda表达式只有在调用getObject方法的时候才回去调用lambda表达式 为什么spring要用三级缓存来解决循环依赖
如果我们能保证所有的bean对象都不会被aop代理那么二级缓存就能解决循环依赖问题但是在spring中很多的bean都需要被代理。
spring的设计原则是在bean初始化完成才会创建代理对象如果按照设计那么就会出现一个问题注入的对象和最终暴露的对象不是同一个对象违背了单例的原则所以需要将代理操作提前
使用二级缓存可以满足解决循环依赖的问题那么就意味着所有bean的创建代理的操作都要提前到实例化后初始化之前去创建代理对象再将代理对象放入到二级缓存中这次的操作是与设计相悖的
那么何不在需要的时候再去创建代理对象呢不需要的时候仍然在初始化后再创建代理对象呢所以这个时候就引入了三级缓存在三级缓存中放入ObjectFactory?等需要的时候再去调用ObejctFactory.getObeject方法该方法只会执行一次就直接删除三级缓存保证了单例需求
默写