在 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
限定符自动分配给注入(inject)点而不指定任何限定符。
但我正在使用 Spring,但无法执行该操作。
Caused by: org.springframework.beans.factory.NoUniqueBeanDefinitionException
问题是“默认”注入(inject)(没有限定符)已经用在很多我无法更改的代码中,我需要为我的用户提供另一种可能的 A
实现。
我知道我可以通过 bean 名称注入(inject)我的新实现,但我想避免它。
Spring 中有什么可以帮助我实现它吗?
最佳答案
有人向我指出@Primary 正是这样做的。我试过了,效果很好:
@Primary
class DefaultImpl implements A {}
在我的例子中,DefaultImpl 是在 xml 中:
<bean id="defaultImpl" class="DefaultImpl" primary="true"/>
关于java - Spring 中是否有等效于 CDI 的 @Default 限定符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19642820/