我正在尝试创建自己的 spring-boot-starter。我有一个类 A,它在构造函数类 B、C 和接口 D 中作为参数,我想在自动配置类中创建一个用 @Bean 注释的方法,该方法返回类 A 的实例。
我尝试为其他三个需要的类(图像的注释代码)创建用 @Bean 注释的方法,因此当创建这三个(B、C、D)时,也许可以使用 @ConditionalOnBean 注释创建一个 bean。但是以这种方式,我不知道如何返回一个 D 的 bean,它是一个接口,而不是一个类,就像 B 和 C 运行良好那样。
//Imports and package statement
@Configuration
@ConditionalOnClass(A.class)
public class AutoConfig {
// @Bean
// @ConditionalOnMissingBean
// public B BFactory() {
// return new B(); // It works
// }
//
// @Bean
// @ConditionalOnMissingBean
// public C CFactory() {
// return new C(); // It works
// }
//
// @Bean
// @ConditionalOnMissingBean
// public D DFactory() {
// return new D(); // I cannot do this because D is an interface
// }
//
@Bean
//@ConditionalOnBean(A.class, B.class, C.class)
@ConditionalOnMissingBean
public A AFactory() {
return new A(?(B.class), ?(C.class), ?(D.class));
}
}
//Imports and package statement
@Component
public class A {
private B attribute1;
private C attribute2;
private D attribute3;
@Autowired
public A(B b, C c, D d) {
this.b = b;
this.c = c;
this.d = d;
}
//Methods...
}
总结一下,如果需要 B、C 和 D 来创建 A 的 bean,而 D 是一个接口,我该如何创建它?
非常感谢你的帮助!