前端之家收集整理的这篇文章主要介绍了
依赖注入 – CDI 1.1中注释的bean发现模式的含义,
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_
404_0@
我正在将应用程序迁移到
Java EE 7,并希望CDI 1.1.但是我没有得到bean-discovery-mode =“annotated”的含义.该
CDI 1.1 specification不是很有帮助.至少我没有找到任何有用的段落.我想念了吗?
此示例与bean-discovery-mode =“all”完美匹配,并注入LoggingClass的实例:
public class LoggingClass {
public Logger logger = Logger.getLogger("ALOGGER");
}
@Test
public class MMLoggerProducerIT extends Arquillian {
@Inject private LoggingClass lc;
}
但是,如果我从bean-discovery-mode =“all”更改为bean-discovery-mode =“annotated”,则容器无法将实例注入到字段lc中.
如何正确注释LoggingClass以使用bean-discovery-mode =“annotated”?
实际上,bean-discovery-mode =“ALL”打开档案中所有类的扫描.这被称为“显式归档”.
省略beans.xml或设置bean-discovery-mode =“ANNOTATED”使归档成为隐式归档.在这种情况下,容器将扫描具有注释范围类型的bean.
这就解释了为什么在设置bean-discovery-mode =“ANNOTATED”时注入LoggingClass.如Java EE 7教程中所述:
CDI can only manage and inject beans annotated with a scope type in an implicit archive.
编辑:所以只要绝对清楚,你需要添加一个范围类型到LoggingClass.所以这样的事情
@SessionScoped
public class LoggingClass {
public Logger logger = Logger.getLogger("ALOGGER");
}
在Java EE 7和CDI 1.1中,我们删除了包含beans.xml部署描述符以打开存档的CDI的要求,使CDI 1.1与其他部署描述符是可选的大多数其他Java EE API一致.它还删除了包含beans.xml的二进制开/关性.您可以使用bean-discovery-mode中的设置来控制容器扫描哪些文件.
请参阅有关打包CDI应用程序的JavaEE教程:
http://docs.oracle.com/javaee/7/tutorial/cdi-adv001.htm#CACDCFDE