依赖注入 – CDI 1.1中注释的bean发现模式的含义

前端之家收集整理的这篇文章主要介绍了依赖注入 – CDI 1.1中注释的bean发现模式的含义前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在将应用程序迁移到 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

猜你在找的设计模式相关文章