在CDI中,我可以这样做:
// Qualifier annotation @Qualifier @inteface Specific{} interface A {} class DefaultImpl implements A {} @Specific class SpecificImpl implements A {}
然后在课堂上:
@Inject A default; @Inject @Specific A specific;
它的工作原理是@Default限定符自动分配给注入点而不指定任何限定符.
但我正在使用Spring并且无法执行该操作.
Caused by: org.springframework.beans.factory.NoUniqueBeanDefinitionException
问题是“默认”注入(没有限定符)已经在我无法改变的许多代码中使用,我需要为我的用户提供另一种可能的A实现.
我知道我可以通过bean名称注入我的新实现,但我想避免它.
Spring中有什么可以帮助我实现它吗?
解决方法
有人指着我@Primary正是这样做的.我尝试过它完美无缺:
@Primary class DefaultImpl implements A {}
在我的情况下,DefaultImpl在xml中:
<bean id="defaultImpl" class="DefaultImpl" primary="true"/>