CDI - 什么是正确的bean.xml格式?

Ral*_*lph 10 java glassfish cdi jboss-weld

我有一个关于bean.xml文件的正确格式和用法的问题.在我的项目中,我通常将此内容用于我的bean.xml文件(不使用explizit bean声明):

<?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">
</beans>
Run Code Online (Sandbox Code Playgroud)

这在WildFly 8和9中运行良好.但是我在GlassFish 4中有部署问题.在问题:Glassfish 4,CDI中的简单示例失败,WELD-001408不满意的依赖关系我写了另一种格式:

<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="all">
</beans>
Run Code Online (Sandbox Code Playgroud)

使用了不同的命名空间.并且GlassFish4似乎关心这一点.

用于JEE7的空bean.xml文件的正确格式是什么?

G. *_*cki 16

正确的空beans.xml可以是完全空的文件,真的;-)

但是当您想添加一些内容时,请注意大多数XML部署描述符名称空间已在Java EE 7中更新.本文将介绍详细信息.还bean-discovery-mode添加了.

BTW:beans.xml我现在使用的样品看起来像:

<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"
       version="1.2" bean-discovery-mode="annotated">

    <!-- some content -->
</beans>
Run Code Online (Sandbox Code Playgroud)

您可能会注意到version="1.2"属性的用法- 您可以自由地将其设置为1.1.它只是作为一个提醒该项目使用CDI 1.2(这其实只是一个读者维护版本CDI 1.1规范).

  • 严格来说,恕我直言,这不是完全空的:在 bean-discovery-mode="annotated" 属性中有一点信息。我想他们可以做得更好,摆脱它,并再次默认为“全部”,恕我直言。 (2认同)