对于CDI注入,我是否需要生产者档案和注册档案中的META-INF / beans.xml?

时间:2012-06-06 14:11:24

标签: cdi jsr299

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

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

我理解,松散地说任何bean存档都需要一个。

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

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

生产者jar 实现jar 都需要是bean归档似乎合乎逻辑,因此每个都需要META-INF/beans.xml个资源它们。

但为了完整,这实际上是这样的吗?由于实现jar 仅使用@Inject点而没有CDI注释,是否会通过其他方式进行扫描?查看它的另一种方法:在此示例中,实现jar 仅使用 作为目标进行注入,而不是注射剂。所以我可以看到某种逻辑可以说:看,只有产生可以注入的bean的罐子需要被声明为bean档案。 (我不是说那是真的;只是我可以看到这个论点正在制定。)

最后,还有 interface jar 的整个问题。根据定义,它不包含bean,但我很久以前就已经看过使用GlassFish的情况,即使接口jar 也必须有一个META-INF/beans.xml文件。这对我来说似乎不对,但我惊讶地发现,我无法在规范中找到确认或否认这一部分的部分。

那么:beans.xml到处都是?只在注射用罐子里?仅在注射目标罐中?还是...?

1 个答案:

答案 0 :(得分:2)

a。)您需要producer和impl jar中的beans.xml标记文件

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