我有一个这样定义的 Spring 组件:
@Component
public class SearchIndexImpl implements SearchIndex {
IndexUpdater indexUpdater;
@Autowired
public SearchIndexImpl(final IndexUpdater indexUpdater) {
Preconditions.checkNotNull(indexUpdater);
this.indexUpdater = indexUpdater;
}
}
以及IndexUpdater接口的两个实现,例如:
@Component
public class IndexDirectUpdater implements IndexUpdater, DisposableBean, InitializingBean {
}
@Component
public class IndexQueueUpdater implements IndexUpdater, DisposableBean, InitializingBean {
}
如果我尝试SearchIndexImpl像这样自动连线:
@Autowired
private SearchIndex searchIndex;
我得到以下异常:
org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type 'IndexUpdater' available: expected single matching bean but found 2: indexDirectUpdater,indexQueueUpdater
这是预料之中的,因为 Spring 无法判断要为的构造函数中的参数IndexUpdater自动连接哪个实现。我如何将 Spring 引导到它应该使用的 bean?我知道我可以使用注释,但这会将索引更新程序硬编码为实现之一,而我希望用户能够指定要使用的索引更新程序。在 XML 中,我可以这样做:indexUpdaterSearchIndexImpl@Qualifier
<bean id="searchIndexWithDirectUpdater" class="SearchIndexImpl">
<constructor-arg index="0" ref="indexDirectUpdater"/>
</bean>
我如何使用 Spring 的 Java 注释来做同样的事情?
慕森卡
相关分类