2017-08-11 36 views
1

当我尝试部署我的web应用程序我得到这些错误:CDI:暧昧的依赖关系,只有一个生产者

暧昧的依赖关系类型AuthzInfo与预选赛@default \ n于注射点[BackedAnnotatedField ]

可能的依赖关系:\ n - 生产者方法[AuthzInfo]与预选赛[@Any @default]宣布为[BackedAnnotatedMethod] @Produces @RequestScoped

我只是创造了一个制片人这样的:

@Produces @RequestScoped 
public AuthzInfo getAuthzInfo(@Context HttpServletRequest httpRequest) 
    //... 
} 

而且我使用,使用@Inject annotation

@Inject private AuthzInfo authzInfo; 

不过,我创建了一个@CurrentUser注释,我已经使用这个注释标记都@Producer @CurrentUser@Inject @CurrentUser。问题已经解决。

为什么我需要使用此工作?只有一个生产者是生产者AuthInfo的对象。

回答

1

您的制作方法返回AuthzInfoAuthzInfo本身是一个CDI托管bean。这就是为什么它在这种情况下不明确并需要限定符。


你可能在你的beans.xml使用bean-discovery-mode="all"

如果更改为bean-discovery-mode="annotated"default in CDI 1.2 and no beans.xml is required),只能用豆定义注释类将被发现,忽略所有其他类:

2.5.1. Bean defining annotations

一个bean类可能有一个bean定义注释,使其成为 ,放置在应用程序的任何位置,如Bean Archives中所定义。一个带有定义注释的bean的类 被认为是一个隐式bean。

设定豆定义注解包含:

  • @ApplicationScoped@SessionScoped@ConversationScoped@RequestScoped注解,

  • 所有其他正常范围类型,

  • @Interceptor@Decorator注释,

  • 所有原型注释(即标注有注释 @Stereotype),

  • @Dependent范围注释。

+0

感谢您的方法。它有道理。但是,我没有任何'beans.xml'。 – Jordi

+0

@Jordi所以你使用CDI 1.2? –