EJB 不明确的依赖关系:如何指定要注入的 class

EJB Ambiguous dependencies: How to specify which class to Inject

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

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

@Inject
UsernamePasswordCredentials credentials;

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

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 集成制作精良,所以我有点困惑您会在标准用法中遇到这样的问题。