循环依赖:循环依赖就是循环引用,就是两个或多个bean相互之间持有对方,比如A引用B,B引用C,C引用A,则它们最终反映为一个环。初始化时就会循环。
解决循环依赖:先创建所有对象,再赋值。
Spring中有三种循环依赖:1、构造器注入构成的循环依赖,是无法解决的,只能抛出BeanCurrentlyInCreationException异常表示循环依赖。2、通过setter注入方式构成的循环依赖。是通过Spring容器提前暴露刚初始化完但未完成其他步骤(如setter注入)的bean来完成。3、对于"prototype"作用域bean,Spring容器无法完成依赖注入。
spring解决setter注入的循环依赖:在bean还没完全创建时,提前暴露ObjectFcatory,ObjectFactory能够获取bean。earlySingletonObjects缓存从ObjectFactory中获取的bean。
网友评论