【发布时间】:2020-01-15 16:10:44
【问题描述】:
我在基于 Spring 4 的项目中有一个抽象配置类。这个类看起来像这样:
public abstract class C<B> {
@Bean
public B b() {
return a();
}
protected abstract B a();
}
当然,这不是真正的课程,但是让我们来学习这个理论课程,它涉及真正问题课程中最重要的部分。
这个类C被多个类扩展。例如:
@Configuration
public class E extends C<X> {
@Override
protected X a() { return new X(); }
}
@Configuration
public class F extends C<Y> {
@Override
protected Y a() { return new Y(); }
}
我们的目标是让每个扩展类实例化并按照它们的预期方式设置 bean,并将实例公开为 Spring bean,以注入其他 bean。换句话说,所有字段都应该有一个注入以下 bean 的 bean 实例:
@Component
public class Bean {
private final X x;
private final Y y;
public Bean(X x, Y y) {
this.x = x;
this.y = y;
}
}
问题是b() 创建的bean 将始终具有b 的名称,这意味着即使我有多个C 的扩展名,也只有一个bean 可用。在上面的示例中,这意味着 x 或 y 字段为空(或将引发异常)。
如何为这些 bean 赋予唯一的名称,以便 C 的所有扩展都可以公开其自己的 bean 实例而不会重叠?
【问题讨论】:
标签: java spring spring-boot