也许只是梳理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
无处不在?只在可注射的罐子里?仅在注射目标罐中?或者...?