我有一个接口,在两个地方定义如下:
@Configuration
public class AppContext {
@Bean
public SomeInterface usageOne() {
return new SameImpl();
}
@Bean
public SomeInterface usageTwo() {
return new SameImpl(someOtherConfig);
}
@Bean
public Client clientOne(SomeInterface usageOne) {
return new Client(usageOne);
}
@Bean
public OtherClient clientTwo(SomeInterface usageTwo) {
return new OtherClient(usageTwo);
}
}
我的客户机实现类没有任何注释,只需要构造函数。在这种情况下,如何限定正确的接口实现用法?我不想用
@Primary
在我的例子中,将其中一种用法命名为primary(它们在某种意义上是相等的)在语义上是不正确的。我需要用相同的实现类传递相同的接口,但针对受尊重客户机的特定用例配置不同。我在想,命名用于将实现注入bean创建方法的参数就足够了,但是Spring抱怨:
required a single bean, but 2 were found
. 我不明白该如何使用
@Qualifier
注释。
我运行的是SpringBoot2.0.4.release,并尊重在单独配置类中创建的bean和客户机,因此我不能只调用
usageTwo()
创建时的方法
OtherClient
像这样:
new OtherClient(usageTwo());
因为这个方法在客户机配置类中不可用。