spring的循环依赖(1)什么是循环依赖

什么是循环依赖

最近学习了一下spring的循环依赖问题,这里总结一下。首先,我们应该知道什么是spring的依赖问题,想要明白这个问题,我们就要先明白spring的创建bean的过程。这里我简单说一下,spring在启动的时候会先初始化我们的项目环境,然后去扫面我们配置的包下面的所有的类,进行解析和注册到beanDecfinition中。然后在根据beanDecfinition的信息对类进行实例化,填充属性等操作变成一个bean,放到我们spring的容器中。在变成bean的过程中,会遇到对象与对象之间的依赖,比如A类中有一个属性B类,那么spring在创建A对象的时候发现了需要一个B对象,这个时候spring就会暂时停止对A的创建,会先去创建B对象,等B对象创建完之后,将B对象注入到A对象中,再接着创建A对象剩下的工作。那么,问题来了,假如A类里有一个B类属性需要注入,而B类又有一个属性A类需要注入,怎么办呢?这就是spring的循环依赖的问题。废话不多说,下面是导致循环依赖的代码

A.class

@Component
public class A {
@Autowired
B b;
}

B.class

@Component
public class B {
@Autowired
A a;
}

AppConfig.class

@ComponentScan(“com.alibaba.ctsg.aa”)
public class AppConfig {
}

Test.class

public class Test {
public static void main(String[] args) {
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
A a = (A) context.getBean(“a”);
B b = (B) context.getBean(“b”);
System.out.println(“A对象中的b属性:”+a.b);
System.out.println(“B对象中的a属性:”+b.a);
}
}

结果

显然能正确打印出结果,根据前面分析,是要发生死循环的,为何正确打印呢
请看下节文章,spring循环依赖的解决
spring的循环依赖(1)什么是循环依赖