3

也许只是梳理CDI 1.0 规范的时间太长了,但我无法找到确切META-INF/beans.xml需要 a 的位置的详细描述。

关于 bean 发现的部分做了一些暗示某些事情的诱人陈述,但我不确定它是否是规定性的。)

我知道松散地说任何 bean 档案都需要一个。

但是考虑在兼容 CDI 1.0 环境中使用以下 jar 的情况:

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

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

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

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

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

4

1 回答 1

2

a.) 您需要生产者和 impl jar 中的 beans.xml 标记文件

b.) 您不需要纯接口 jar 上的 beans.xml 标记文件。如果 GlassFish 失败,那么这是一个 gf 错误。虽然它没有任何害处。

于 2012-06-06T15:18:14.150 回答