Spring 引导中的分层 Bean 依赖性
Hierarchical Bean Dependency in Spring Boot
我有一个 bean 依赖层次结构,其父级 class S 为:
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 引导依赖注入来解决这个问题的任何输入?
您可以将所需的 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();
}
我有一个 bean 依赖层次结构,其父级 class S 为:
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 引导依赖注入来解决这个问题的任何输入?
您可以将所需的 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();
}