CDI和web片段:没有beans.xml就无法工作



我有三个maven项目:

  • core(packagetype=JAR),带有src/main/resources/beans.xmlbean discovery mode="annotated"
  • webfragment(packagetype=JAR),带有src/main/resources/beans.xmlbean discovery mode="annotated"
  • webproject(packagetype=WAR),带有src/main/webapp/WEB-INF/beans.xmlbean discovery mode="annotated"

我的类路径中有org.jboss.weld.servlet:weld-servlet2.2.9.Final(CDI1.2),并使用tomcat 7.0.55。此外,我使用Servlet 3、Deltaspike 1.2.1、Mojarra 2.2.10。

我的所有CDI bean都有一个bean定义注释(请参阅CDI 1.1中注释的bean发现模式的含义)

Weld警告我

servletWeldServlet[WARN]WELD-ENV-001004:同时找到WEB-INF/beans.xml和WEB-INF/classes/META-INF/beans..xml。同时使用这两个位置是不可移植的。Weld将使用jndi:/localhost/webproject/WEB-INF/beans.xml.

但是一切都很好。

因此,我删除了所有beans.xml,因为我不应该在CDI 1.2中使用它们,但之后什么都不起作用了:WELD-001408:不满意的依赖项

我错过了什么?这是网络碎片问题吗?

注入点[BackedAnnotatedMethod]或类似的不满意依赖性

显示解析失败的注入点,检查注入字段的类型是否有注释。

即:

@Inject
private SomeService injectedService;

然后CDI1.2规定,如果没有定义beans.xml,它将只扫描带注释的bean。

因此

@SessionScoped or 
{@ApplicationScoped, @Dependent, @RequestScoped, @ConversationScoped}
public class SomeService{}

最新更新