【发布时间】: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 jar 和 implementation 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 无处不在?只在可注射的罐子里?仅在注射目标罐中?还是……?
【问题讨论】: