【问题标题】:For CDI injection, do I need META-INF/beans.xml in the producer archive AND the injectee archive?对于 CDI 注入,我是否需要生产者存档和被注入者存档中的 META-INF/beans.xml?
【发布时间】:2012-06-10 13:43:03
【问题描述】:

也许梳理CDI 1.0 specification 的时间太长了,但我无法找到需要META-INF/beans.xml 的确切位置的详细说明。

section on bean discovery 做了一些暗示某些事情的诱人陈述,但我不确定它是否具有规定性。)

我明白任何 bean 存档都需要一个。

但考虑在符合 CDI 1.0 的环境中使用以下 jar 的情况:

  • 接口 jar 仅包含接口
  • 一个implementation jar,其中包含实现这些接口并具有@Inject 注入点的CDI bean,但没有生产者方法
  • 生产者 jar 包含(为简单起见)带有单个方法的单个 Java 对象,该对象已使用 @Produces 进行注释。

producer jarimplementation jar 都需要是 bean 档案,这似乎是合乎逻辑的,因此每个都需要包含在其中的 META-INF/beans.xml 资源。

但为了完整起见,事实是否如此?由于implementation jar只使用了@Inject点,没有CDI注解,会不会被其他方式扫描?另一种看待它的方式:在这个例子中,implementation jaronly被用作注入的target,而不是source 注射剂。所以我可以看到某种逻辑会说:看,只有产生 可以注入的 bean 的 jar 需要声明为 bean 档案。 (我并不是说这是真的;只是我可以看到这个论点。)

最后,是interface jar的全部问题。根据定义,它不包含 bean,但我很久以前就看到过 GlassFish 的情况,即使是 interface jar 也必须在其中包含 META-INF/beans.xml 文件。这对我来说似乎是错误的,但令我惊讶的是,我真的无法在规范中找到一个部分来确认或否认这一点。

所以:beans.xml 无处不在?只在可注射的罐子里?仅在注射目标罐中?还是……?

【问题讨论】:

    标签: cdi jsr299


    【解决方案1】:

    a.) 您需要在 producer 和 impl jar 中都有 beans.xml 标记文件

    b.) 您不需要在纯接口 jar 上使用 beans.xml 标记文件。如果 GlassFish 失败,那么这是一个 gf 错误。不过也没什么坏处。

    【讨论】:

      猜你喜欢
      • 2013-09-17
      • 1970-01-01
      • 2017-02-09
      • 2013-09-16
      • 1970-01-01
      • 1970-01-01
      • 2014-03-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多