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

时间:2015-02-03 12:56:03

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

我正试图在我的EJB中注入一个对象:

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

@Inject
UsernamePasswordCredentials credentials;

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

  

类型为UsernamePasswordCredentials的不明确依赖项,带有限定符@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]

1 个答案:

答案 0 :(得分:2)

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

@Inject
Instance<UsernamePasswordCredentials> credInst;

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

除此之外,我不是Picket Link专家,但我认为你在做这个框架时出了问题。 Picket Link CDI集成非常精心制作,所以我有点疑惑你可能会在标准用法中遇到这样的问题。