CDI:bean-discovery-mode = annotated被忽略

时间:2015-05-25 06:19:47

标签: java osgi cdi apache-felix weld

我使用焊接作为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>

但它没有帮助。

2 个答案:

答案 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