上下文和依赖注入2.0( JSR 365 )是CDI 1.2的更新,CDI 1.2目前是Java EE 7平台的一部分。 目前处于公开审查阶段 。 对于不熟悉CDI的那些人,它定义了一组功能强大的免费服务,这些服务可充当凝胶,帮助改善应用程序代码的协调性和结构。 有关更多详细信息,请访问规格页面 。

CDI 2.0也将上下文和依赖注入服务的可用性扩展到Java SE,因为它现在将同时面向Java SE和Java EE平台。 CDI规范分为三部分, 第一部分-核心CDI , 第二部分-Java SE中的 CDI , 第三 部分-Java EE中的CDI 。 CDI 2.0的主要更改如下:

  • 与Java SE 8更好地结合
  • 用于在Java SE应用程序中引导CDI的API
  • 提供观察者订购的能力
  • 能够触发异步事件
  • 服务提供商接口(SPI)元素的新配置器接口
  • 能够在ProcessObserverEvent事件中配置或否决观察者方法
  • 支持特定注释类型的内联实例化
  • 增加了InterceptionFactory接口,该接口允许创建一个包装实例,该包装实例的方法调用被方法拦截器拦截并转发到提供的实例。

我鼓励您查看CDI 2.0公共审查草案,以详细了解列出的每个增强功能的详细信息以及新功能的完整列表。 通读草案并向专家组提供反馈。 有关提供反馈的所有相关详细信息,请参见JSR 365页面 。 要开始测试,请在您喜欢的IDE中创建一个新的基于Maven的Java EE应用程序,并添加以下依赖项:

<dependency><groupid>javax.enterprise</groupid><artifactid>cdi-api</artifactid><version>2.0-PFD</version></dependency><dependency><groupid>org.jboss.weld</groupid><artifactid>weld-core-bom</artifactid><version>3.0.0.Alpha14</version><type>pom</type></dependency>

在本文中,我们将深入探讨其中的一项新功能,以帮助您开始使用API​​。 让我们看一下异步事件。 在CDI 2.0之前,只能以同步方式触发事件。 在用于异步处理的最新迭代中对它们进行了增强。 运作方式如下:

创建某种类型的事件。 接下来,以异步方式触发事件,并在事件完成后进行相应处理。 在此示例中,我创建了MovieEvent类,每当Movie对象发生持久事件时都将使用该类。 MovieEvent类如下:

public class MovieEvent {private String message;private Movie movie;public MovieEvent(String message, Movie movie){this.message = message;this.movie = movie;}public String getMessage(){return this.message;}public void setMessage(String message){this.message = message;}public Movie getMovie(){return this.movie;}public void setMovie(Movie movie){this.movie = movie;}}

在以下情况下,当新的电影持续存在时,我们将触发一个事件。 以下代码位于示例JSF应用程序的MovieController CDI bean中:

@Named("movieController")
@SessionScoped
public class MovieController implements Serializable {@EJBprivate com.mycompany.cditest.session.MovieFacade ejbFacade;private List items = null;private Movie selected;@InjectEvent<MovieEvent> movieEvents;
. . .private void persist(PersistAction persistAction, String successMessage) {if (selected != null) {setEmbeddableKeys();try {if (persistAction != PersistAction.DELETE) {getFacade().edit(selected);movieEvents.fireAsync(new MovieEvent("New Movie Released", selected)).whenComplete((event, throwable) -> {if(throwable != null){System.out.println("Error has occurred: " + throwable.getMessage());} else {System.out.println("Successful Movie Processing...");}});} else {getFacade().remove(selected);}JsfUtil.addSuccessMessage(successMessage);} catch (Exception ex) {Logger.getLogger(this.getClass().getName()).log(Level.SEVERE, null, ex);JsfUtil.addErrorMessage(ex, ResourceBundle.getBundle("/Bundle").getString("PersistenceErrorOccured"));}}
. . .

触发事件时,它将创建一个新的MovieEvent对象,如果成功完成,则将显示一条消息以指示成功。 在此示例中,流用于处理“ whenComplete”动作。

随时克隆位于https://github.com/juneau001/CdiTest的存储库,并进行CDI 2.0测试。 此示例只是CDI 2.0的一个简单测试。 您可以克隆并利用此测试项目作为与规范其他方面一起工作的起点。 请密切注意目前处于“公开审核”投票阶段的JSR 365。

翻译自: https://www.javacodegeeks.com/2017/03/jsr-365-update-digging-cdi-2-0.html

JSR 365更新:深入CDI 2.0相关推荐

  1. vue.jsr入门_JSR 365更新:深入CDI 2.0

    vue.jsr入门 上下文和依赖注入2.0( JSR 365 )是CDI 1.2的更新,CDI 1.2目前是Java EE 7平台的一部分. 目前处于公开审查阶段 . 对于不熟悉CDI的那些人,它定义 ...

  2. cdi 2.7.5_看一下CDI 2.0 EDR1

    cdi 2.7.5 CDI是最近对Java EE最好的补充之一. 该观点在用户和集成商之间广泛共享. 当前版本的CDI 1.2于2014年4月发布.现在,在2015年中期,我们将面对CDI 2.0规范 ...

  3. Java SE中的Bootstrap CDI 2.0

    抽象 这是在Java SE应用程序中引导CDI 2.0的快速参考. CDI 2.0(JSR 365) Maven依赖 <dependency><groupId>org.jbos ...

  4. 看一下CDI 2.0 EDR1

    CDI是最近对Java EE最好的补充之一. 该观点在用户和集成商之间广泛共享. 当前版本的CDI 1.2于2014年4月发布.现在,在2015年中期,我们将面对CDI 2.0规范的早期草案. CDI ...

  5. linux 批量站群建站软件,365建站器9.0(批量建站站群软件)8月1日正式发布

    原标题:365建站器9.0(批量建站站群软件)8月1日正式发布 一.数据采集功能更新. 1.升级数据采集功能,完善365建站器数据处理能力. 升级数据采集功能,可以多个采集规则批量采集,也可以定时批量 ...

  6. Nessus更新到8.6.0

    Nessus更新到8.6.0 此次更新,变化主要有以下几点: (1)加强过期提醒.购买链接,并且允许用户启用关闭提醒功能. (2)Nessus基础班和试用版中,导出的报告默认带有水印. (3)Ness ...

  7. Nessus更新到8.5.0

    Nessus更新到8.5.0 此次更新,主要涉及以下变化: (1)Nessus的用户注册和激活流程进行简化.用户可以在Nessus软件中直接进行注册和激活. (2)Nessus报告生成功能得到加强.用 ...

  8. Nessus更新到8.3.0

    Nessus更新到8.3.0 更新内容包括: (1)专业版的报告功能更为灵活,允许用户选择包含的信息. (2)提升Nessus Manager的性能. (3)允许扫描模版多次更新. (4)生成报告时, ...

  9. cdi 2.7.5_集成测试CDI 1.0和Spring 3.1中的作用域bean

    cdi 2.7.5 在这篇博客文章中,我描述了如何在Spring和CDI中使用作用域bean进行集成测试. 一切都用小代码示例进行说明. 使用范围进行集成测试并不是特别容易. 想象一下存在于会话范围内 ...

最新文章

  1. ftl数据类型转换以及list遍历的使用
  2. 微软推出的Pylance,随着VS Code的更新,性能又前进了一步
  3. tone mapping简介
  4. 基于JAVA+SpringBoot+Mybatis+MYSQL的在线购物商城系统
  5. JavaScript刷新页面,不重复提交
  6. 有多个正整数存放在数组中,编写一个函数要求偶数在左边由小到大顺序放置,奇数在右边,也是由小到大顺序放置,Java实现...
  7. python3哪个版本稳定-Python 3.9 发布稳定版本,八大特性学起来!
  8. 在qt中使用QSplitter设置初始比例setStretchFactor失效的解决方法
  9. 三星android驱动程序错误,android系统的三星手机插入电脑无法识别
  10. zedgraph显示最小刻度_关于ZedGraph几个难点
  11. 【北京工业大学申请个人学生邮箱】
  12. Google Colaboratory:一款用于深度学习的免费GPU使用方法
  13. 汇编DOS与Windows Masm编译运行代码步骤详解
  14. 全面理解面向对象的 JavaScript
  15. C语言学习(十)C语言中的小数
  16. 医院病案管理系统MRMS源码 病案管理 医院源码
  17. 160809219 徐挺峰 实验2选择结构程序设计
  18. 微软今天的Windows 10硬件发布会汇总:手机瞬间变PC
  19. 登录功能——web网站登录
  20. ubuntu更换阿里云镜像源操作步骤

热门文章

  1. 内存模型是怎么解决缓存一致性的
  2. MySQL cast()函数
  3. 《呐喊》金句摘抄(一)
  4. 银行营业网点管理系统——entity类(CityArea)
  5. pythonnumpy教程_Python教程:numpy的基本介绍
  6. 用Python开始机器学习(4:KNN分类算法)
  7. 解耦,未解耦的区别_幂等与时间解耦之旅
  8. Java中的复合设计模式
  9. HATEOAS的RESTful服务。 记录超媒体API
  10. netbeans ide_IDE:5个最喜欢的NetBeans功能