我正在尝试在我的 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/