设为首页 加入收藏

TOP

Java EE 8 中的新特性(一)
2017-10-29 06:07:18 】 浏览:902
Tags:Java 特性

万众期待的 Java?EE 8 即将发布。这是自 2013 年 6 月以来 Java 企业平台的首次发布,是分成两部分的发布中的前半部分(后一部分是 Java EE 9)。Oracle 对 Java EE 进行了战略性重新定位,重点关注一些支持云计算、微服务和反应式编程的技术。反应式编程现在正融入到许多 Java EE API 的架构中,而 JSON 交换格式为核心平台提供了支撑。

我们将大体了解 Java EE 8 中提供的主要特性。重点包括 API 更新和引入、对 HTTP/2 的新支持、反应式编程,以及 JSON。我们首先会介绍 Java EE 规范和升级,它们无疑将决定企业 Java 编程未来几年的发展方向。

全新的 API 和更新的 API

Java EE 8 向核心 API 引入了一些主要和次要更新,比如 Servlet 4.0 和 Context and Dependency Injection 2.0。还引入了两个新的 API —Java API for JSON Binding (JSR 367) 和 Java EE Security API (JSR 375)。我们首先介绍新的 API,然后探索对存在已久的 Java EE 规范的改动。

JSON Binding API

新的 JSON Binding API (JSON-B) 支持在 Java 对象与兼容 RFC 7159 的 JSON 之间执行序列化和反序列化,同时维护与 JAXB (Java API for XML Binding 2.0) 的一致性。它提供了从 Java 类和实例到符合公认约定的 JSON 文档的默认映射。

JSON-B xu 还允许开发人员自定义序列化和反序列化。您可以使用注释自定义各个类的这些流程,或者使用运行时配置构建器来开发自定义策略。后一种方法包括使用适配器来支持用户定义的自定义。JSON-B 与 Java API for JSON Processing (JSON-P) 1.1(本文后面将讨论)紧密集成。

规范内容

两个接口为新的 JSON Binding API 提供了入口:JsonbBinding 和 Jsonb。

  • JsonbBinding 提供了 JSON Binding API 的客户端访问点。为此,它通过根据所设置的配置和参数来构建 Jsonb 实例。
  • Jsonb 通过方法 toJson() 和 fromJson() 提供序列化和反序列化操作。

JSON-B 还可以向插入的外部 JSON Binding 提供者描述功能,所以您不受 API 附带的绑定逻辑的限制。

使用 JsonB 实现序列化和反序列化

清单 1 首先序列化 Book 类 book 的实例,然后将其反序列化。
清单 1. 序列化和反序列化的最简单示例

String bookJson = JsonbBuilder.create().toJson(book);
Book book = JsonbBuilder.create().fromJson(bookJson, Book.class);

静态 create() 工厂方法返回一个 Jsonb 实例。您可以在该实例上调用许多重载的 toJson() 和 fromJson() 方法。另请注意,该规范没有强制要求来回等效转换:在上面的示例中,将 bookJson 字符串传入 fromJson() 方法中可能不会反序列化为一个等效对象。

JSON-B 还支持采用与对象大致相同的方式来绑定集合类与原语和/或实例数组 —包括多维数组。

自定义 Jsonb

可通过为字段、JavaBeans 方法和类添加注释,对 Jsonb 方法的默认行为进行自定义。

例如,可以使用 @JsonbNillable 和 @JsonbPropertyOrder 注释来自定义 null 处理和属性顺序,该顺序应在类级别上进行自定义:

清单 2. 自定义 Jsonb

@JsonbNillable
@JsonbPropertyOrder(PropertyOrderStrategy.REVERSE)
public class Booklet {
 
   private String title;
 
   @JsonbProperty("cost")
   @JsonbNumberFormat("#0.00")
   private Float price;
 
   private Author author;
 
   @JsonbTransient
   public String getTitle() {
       return title;
   }
 
   @JsonbTransient
   public void setTitle(String title) {
       this.title = title;
   }
 
   // price and author getters/setter removed for brevity
 }

调用方法 toJson() 会生成清单 3 中所示的 JSON 结构。

清单 3. 自定义的 JSON 结构

{
  "cost": "10.00",
  "author": {
    "firstName": "Alex",
    "lastName": "Theedom"
  }
}

也可以选择通过运行时配置构建器 JsonbConfig 来执行自定义:

清单 4. Jsonb 的运行时配置

JsonbConfig jsonbConfig = new JsonbConfig()
    .withPropertyNamingStrategy(
        PropertyNamingStrategy.LOWER_CASE_WITH_DASHES)
    .withNullValues(true)
    .withFormatting(true);
 
Jsonb jsonb = JsonbBuilder.create(jsonbConfig);

清单 4 将 JSON-B 配置为使用 LOWER_CASE_WITH_DASHES 约定,以便将 null 保留在它们所在的位置,并输出经过优化的 JSON。

开源绑定

前面已经提到过,您不需要使用现成的 JSON-B 选项。清单 5 展示了如何配置开源绑定实现:
清单 5. 开源绑定配置

JsonbBuilder builder = JsonbBuilder.newBuilder("aProvider");

Java EE Security API

新 Java EE Security API 的引入,是为了更正各种 servlet 容器在解决安全问题的方式上的不一致。这个问题在 Java Web 配置文件中尤为突出,主要是因为 Java EE 仅规定了完整的 Java EE 配置文件必须如何实现标准 API。新规范还引入了一些现有 API 没有利用的现代功能,比如 CDI。

这个 API 的美妙之处在于,它提供了一种配置身份存储和身份验证机制的备选方法,但没有取代现有安全机制。开发人员应该非常希望拥有在 Java EE Web 应用程序中启用安全性的机会,无论是否使用特定于供应商的解决方案或专用的解决方案。

规范内容

Java EE Security API 规范解决了 3 个关键问题:

  • HttpAuthenticationMechanism 支持对 servlet 容器执行身份验证。
  • IdentityStore 标准化了 JAAS LoginModule。
  • SecurityContext 提供了一个实现编
首页 上一页 1 2 3 4 5 6 下一页 尾页 1/6/6
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Java 多线程知识小抄集 ( 一 ) 下一篇从串行线程封闭到对象池、线程池

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目