以下场景
public interface MyInterface{
void doSomething();
}
@ApplicationScoped
public static class MyInterfaceImpl implements MyInterface{
@Override
public void doSomething() {
}
}
@ApplicationScoped
public static class MyInterfaceImplProxy implements MyInterface{
@Inject
MyInterface myInterface;
@Override
public void doSomething() {
myInterface.doSomething();
}
}
字符串
当然,我们现在遇到了一个问题,因为一个接口有两个bean可用。
的数据
有没有一种方法可以这样注解代理bean,这样它就不会被认为是一个实际的MyInterface
类型的bean,或者是在这里使用@Named
bean的唯一方法?
1条答案
按热度按时间cngwdvgl1#
你有两种方法来解决这个问题。
(1)您可以开始使用CDI限定符来区分这些bean--每个bean都有一组类型和一组限定符,基于这些限定符,它被注入。在您的示例中,使用了默认限定符,因此解决方案不明确。
(2)您可以限制bean的bean类型。这是通过在bean类上放置
@Typed()
注解并显式列出您希望该bean具有的类型来完成的。这里是一个链接到雅加达文件更深入地描述它。最后但并非最不重要的一点是,如果您只是想用另一个impl * 替换 * 一个impl(或者,换句话说,提供一个应该优先考虑的impl),那么您可能需要研究CDI替代方案-这归结为使用
@Alternative @Priority(x)
注解所需的bean类。我不确定这是你要找的,只是把它放在这里,这样你就知道的选择。