java - EJB 不明确的依赖关系 : How to specify which class to Inject

标签 java jakarta-ee dependency-injection ejb cdi

我正在尝试在我的 EJB 中注入(inject)一个对象,如下所示:

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

@Inject
UsernamePasswordCredentials credentials;

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

Ambiguous dependencies for type UsernamePasswordCredentials with qualifiers @Default

Managed Bean [class org.picketlink.idm.credential.UsernamePasswordCredentials] with qualifiers [@Any @Default],

Managed Bean [class org.picketlink.idm.credential.TOTPCredentials] with qualifiers [@Any @Default]

最佳答案

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

@Inject
Instance<UsernamePasswordCredentials> credInst;

public UserNamePasswordCredentials getCredentials() {
  return credInst.select(UsernamePasswordCredentials.class).get();
}

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

关于java - EJB 不明确的依赖关系 : How to specify which class to Inject,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28299493/

相关文章:

java - PageFactory.initElements 填充了哪些 WebElements?

找不到 Java .txt 文件

java - 在子系统之间共享对象

asp.net-mvc-4 - SignalR、WebAPI 和 MVC 共享相同的依赖解析器内核

java - Spring 循环依赖与范围 PROTOTYPE

java - 获取大小为 n 但只有 k 个 1 的所有二进制组合

jakarta-ee - 在 TomEE 中使用 Weld CDI 代替 OpenWebBeans

java - servlet.PageNotFound : No mapping found for HTTP request with URI in DispatcherServlet

php - 单例和服务定位器的真正替代品?

java - 如何获取 UPI 超链接支付中指定的 url 的响应