java - Spring是怎么解决Bean之间的循环依赖的?

查看:161
本文介绍了java - Spring是怎么解决Bean之间的循环依赖的?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

Spring Bean的初始化是首先调用Bean的默认构造器,然后调用set方法对属性进行注入。

如果:
A包含属性B,B包含了属性A。

例子:

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

    public void aHello(){
        System.out.println("aHello!");
    }

    public void bothHello(){
        aHello();
        b.bHello();
    }
}

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

    public void bHello(){
        System.out.println("bHello!");
    }

}

public class HelloApp {
    public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");
        A a = context.getBean(A.class);
        a.bothHello();
    }
}

输出:

aHello!
bHello!

A和B循环引用,程序正常运行。请问Spring是怎么解决类似的循环引用问题的?

解决方案

先创建基本的Bean,再依赖注入(DI)。这样就没什么问题,解释得通。
比如顺序如下:

  1. new出A的实例,

  2. new出B的实例,

  3. A Bean中的b字段赋值B的实例,

  4. B bean中的a字段赋值A的实例。

这篇关于java - Spring是怎么解决Bean之间的循环依赖的?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆