弹簧靴中的分层bean依赖性



我具有同一父类s的bean依赖性层次结构:

a-> b-> c

bean a包含bean b,bean b包含具有这样的代码结构的c:

public class A extends S {
    private S successor;
}
public class B extends S {
    private S successor;       
}
public class C extends S {       
    private S successor;
}

实施时,我有

A a = new A();
B b = new B();
C c = new C();
a.successor = b;
b.successor = c;

我真正想在这里做的事情,以在Configuration中设置上述所有即时的bean创建和依赖关系,而不是在代码中进行硬编码;类似:

@Configuration
public class MyConfig {

    @Bean
    public A a {
        return new A();
    }
    @Bean
    public B b {
        B b = new B();
        A a; // somehow get the bean A here
        a.successor = b;
    }
    @Bean
    public C c {
        C c = new C();
        B b; // somehow get the bean b here
        b.successor = c;
    }
}

关于如何使用Spring Boot依赖注入进行此操作的任何输入?

您可以将所需的bean作为参数传递给提供商方法。

@Bean
public A a() {
    return new A();
}
@Bean
public B b(A a) {
    B b = new B();
    a.successor = b;
    return b;
}
@Bean
public C c(B b) {
    C c = new C();
    b.successor = c;
    return c;
}

但是,仅当b被注入某个地方时,才能设置A.Successor。我相信这不是您所期望的,并且需要颠倒建筑链:

@Bean
public A a(B b) {
    A a = new A();
    a.successor = b;
    return a;
}
@Bean
public B b(C c) {
    B b = new B();
    b.successor = c;
    return b;
}
@Bean
public C c() {
    return new C();
}

最新更新