我使用焊接作为CDI容器。除了我使用osgi(felix)。所以它是javase + felix + weld + pax。我有以下beans.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/beans_1_0.xsd"
bean-discovery-mode="annotated">
</beans>
我有两节课:
@ApplicationScoped
public class A {
@Inject
private B b;
public void postCreate(@Observes ContainerInitialized event, BundleContext ctx) {
b.test();
}
}
和B级
public class B{
public void test(){
System.out.println("test is here");
}
}
如您所见,B类没有任何@scopes或@dependent注释。但是,当我启动类B的应用程序对象时,将对象A注入并调用方法测试。为什么?据我所知,一定不能注射。
编辑1
我试着使用1.1版本:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/beans_1_1.xsd"
bean-discovery-mode="annotated" version="1.1">
</beans>
但它没有帮助。
答案 0 :(得分:0)
您必须在beans.xml中指定1.1版本。
version="1.1" bean-discovery-mode="annotated"
现在,您的bean部署档案是焊接的显式存档 查看详情:enter link description here
答案 1 :(得分:0)
我写了关于焊接邮件列表的内容,这就是Jozef Hartinger(主要焊接开发商之一)所写的
到目前为止,Pax CDI似乎只实现了显式的bean归档。我在https://ops4j1.jira.com/browse/PAXCDI-186提交了一个问题 您需要标记您不想发现的类/包 @Vetoed或使用排除过滤器 http://docs.jboss.org/cdi/spec/1.2/cdi-spec.html#exclude_filters