加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-14 00:48:13 所属栏目:百科 来源:网络整理
导读:我正在将应用程序迁移到 Java EE 7,并希望CDI 1.1.但是我没有得到bean-discovery-mode =“annotated”的含义.该 CDI 1.1 specification不是很有帮助.至少我没有找到任何有用的段落.我想念了吗? 此示例与bean-discovery-mode =“all”完美匹配,并注入Logging
我正在将应用程序迁移到 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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读