【问题标题】:EJB Ambiguous dependencies: How to specify which class to InjectEJB 模糊依赖:如何指定要注入的类
【发布时间】:2015-02-03 12:56:02
【问题描述】:

我正在尝试像这样在我的 EJB 中注入一个对象:

@Stateless
@Path("/auth")
public class Login {

@Inject
UsernamePasswordCredentials credentials;

问题是 UsernamePasswordCredentials 有一个子类,并且两个类具有相同的限定符,这会导致不明确的依赖关系。如何指定我要注入父类的实例而不是子类?错误信息如下所示:

带有限定符 @Default 的 UsernamePasswordCredentials 类型的不明确依赖

带有限定符 [@Any @Default] 的托管 Bean [class org.picketlink.idm.credential.UsernamePasswordCredentials],

带有限定符 [@Any @Default] 的托管 Bean [class org.picketlink.idm.credential.TOTPCredentials]

【问题讨论】:

    标签: java jakarta-ee dependency-injection ejb cdi


    【解决方案1】:

    您可以使用编程查找机制来限制所需 bean 的实际类型:

    @Inject
    Instance<UsernamePasswordCredentials> credInst;
    
    public UserNamePasswordCredentials getCredentials() {
      return credInst.select(UsernamePasswordCredentials.class).get();
    }
    

    除此之外,我不是 Picket Link 专家,但我认为您在框架上做错了什么。 Picket Link CDI 集成做得非常好,所以我有点不明白你会在标准使用中遇到这样的问题。

    【讨论】:

    • 我觉得你应该在Picketlink用户论坛上提问developer.jboss.org/en/picketlink/…
    • 如果我不得不猜测,你并不是要注入这些类。它们来自的 JAR 中没有 beans.xml。这些类不是来自 CDI 集成。由于它们都是依赖注入它们不会帮助你 - 你可能需要一个自定义生产者。
    猜你喜欢
    • 2021-09-08
    • 2012-08-13
    • 1970-01-01
    • 2018-02-25
    • 2018-07-01
    • 2011-07-14
    • 2012-08-01
    • 1970-01-01
    • 2014-06-01
    相关资源
    最近更新 更多