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循环依赖的解决
在这里插入图片描述

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值