java 如何在CDI中注解代理bean以使其不被视为“接口的bean”

gstyhher  于 2023-08-01  发布在  Java
关注(0)|答案(1)|浏览(78)

以下场景

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的唯一方法?

cngwdvgl

cngwdvgl1#

你有两种方法来解决这个问题。
(1)您可以开始使用CDI限定符来区分这些bean--每个bean都有一组类型和一组限定符,基于这些限定符,它被注入。在您的示例中,使用了默认限定符,因此解决方案不明确。
(2)您可以限制bean的bean类型。这是通过在bean类上放置@Typed()注解并显式列出您希望该bean具有的类型来完成的。这里是一个链接到雅加达文件更深入地描述它。
最后但并非最不重要的一点是,如果您只是想用另一个impl * 替换 * 一个impl(或者,换句话说,提供一个应该优先考虑的impl),那么您可能需要研究CDI替代方案-这归结为使用@Alternative @Priority(x)注解所需的bean类。我不确定这是你要找的,只是把它放在这里,这样你就知道的选择。

相关问题