我有三个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{}