我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Java_Spring之Spring5 的新特性

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Java_Spring之Spring5 的新特性

1 与 JDK 相关的升级

1.1 jdk 版本要求:

  • spring5.0 在 2017 年 9 月发布了它的 GA(通用)版本。该版本是基于 jdk8 编写的,所以 jdk8 以下版本将无法使用。同时,可以兼容 jdk9 版本。
  • tomcat 版本要求 8.5 及以上。
  • 注:
    • 使用 jdk8 构建工程,可以降版编译。但是不能使用 jdk8 以下版本构建工程。
    • 由于 jdk 和 tomcat 版本的更新,IDE 也需要同时更新。(目前使用的 eclipse 4.7.2)

1.2 利用 jdk8 版本更新的内容

第一:基于 JDK8 的反射增强

请看下面的代码:

public class Test {
 
    //循环次数定义:10 亿次
    private static final int loopCnt = 1000 * 1000 * 1000;
    
    public static void main(String[] args) throws Exception {
        //输出 jdk 的版本
        System.out.println("java.version=" + System.getProperty("java.version"));
        t1();
        t2();
        t3();
    }
 
    // 每次重新生成对象
    public static void t1() {
        
        long s = System.currentTimeMillis();
        
        for (int i = 0; i < loopCnt; i++) {
            Person p = new Person();
            p.setAge(31);
        }
    
        long e = System.currentTimeMillis();
        System.out.println("循环 10 亿次创建对象的时间:" + (e - s));
    }
 
    // 同一个对象
    public static void t2() {
 
        long s = System.currentTimeMillis();
        Person p = new Person();
        
        for (int i = 0; i < loopCnt; i++) {
            p.setAge(32);
        }
 
        long e = System.currentTimeMillis();
        System.out.println("循环 10 亿次给同一对象赋值的时间: " + (e - s));
    }
 
    //使用反射创建对象
    public static void t3() throws Exception {
        
        long s = System.currentTimeMillis();
        Class<Person> c = Person.class;
        Person p = c.newInstance();
        Method m = c.getMethod("setAge", Integer.class);
 
        for (int i = 0; i < loopCnt; i++) {
            m.invoke(p, 33);
        }
 
        long e = System.currentTimeMillis();
        System.out.println("循环 10 亿次反射创建对象的时间:" + (e - s));
    }
 
    static class Person {
        
        private int age = 20;
    
        public int getAge() {
            return age;
        }
 
        public void setAge(Integer age) {
            this.age = age;
        }
    }
}

jdk1.8 版本(就是 JDK8)运行时间如下:

当切换到 jdk1.7 版本之后,运行时间如下:

有此我们可以看出,在反射创建对象上,jdk8 确实做了加强。

  • 第二:@NonNull 注解和@Nullable 注解的使用
    • 用 @Nullable 和 @NotNull 注解来显示表明可为空的参数和以及返回值。这样就够在编译的时候处理空值而不是在运行时抛出 NullPointerExceptions。
  • 第三:日志记录方面
    • Spring Framework 5.0 带来了 Commons Logging 桥接模块的封装, 它被叫做 spring-jcl 而不是标准的 Commons Logging。当然,无需任何额外的桥接,新版本也会对 Log4j 2.x, SLF4J, JUL ( java.util.logging) 进行自动检测。

2 核心容器的更新

  • Spring Framework 5.0 现在支持候选组件索引作为类路径扫描的替代方案。该功能已经在类路径扫描器中添加,以简化添加候选组件标识的步骤。
  • 应用程序构建任务可以定义当前项目自己的 META-INF/spring.components 文件。在编译时,源模型是自包含的,JPA 实体和 Spring 组件是已被标记的。
  • 从索引读取实体而不是扫描类路径对于小于 200 个类的小型项目是没有明显差异。但对大型项目影响较大。加载组件索引开销更低。因此,随着类数的增加,索引读取的启动时间将保持不变。
  • 加载组件索引的耗费是廉价的。因此当类的数量不断增长,加上构建索引的启动时间仍然可以维持一个常数, 不过对于组件扫描而言,启动时间则会有明显的增长。
  • 这个对于处于大型 Spring 项目的开发者所意味着的,是应用程序的启动时间将被大大缩减。虽然 20或者 30 秒钟看似没什么,但如果每天要这样登上好几百次,加起来就够你受的了。使用了组件索引的话,就能帮助你每天过的更加高效。

可以在 Spring 的 Jira 上了解更多关于组件索引的相关信息。

3 JetBrains Kotlin 语言支持

Kolin概述:是一种支持函数式编程编程风格的面向对象语言。Kotlin 运行在 JVM 之上,但运行环境并不限于 JVM。

Kolin 的示例代码:

{
    ("/movie" and accept(TEXT_HTML)).nest {
        GET("/", movieHandler::findAllView)
        GET("/{card}", movieHandler::findOneView)
    }
 
    ("/api/movie" and accept(APPLICATION_JSON)).nest {
        GET("/", movieApiHandler::findAll)
        GET("/{id}", movieApiHandler::findOne)
    }
}

Kolin 注册 bean 对象到 spring 容器:

val context = GenericApplicationContext {
    registerBean()
    registerBean { Cinema(it.getBean()) }
}

4 响应式编程风格

  • 此次 Spring 发行版本的一个激动人心的特性就是新的响应式堆栈 WEB 框架。这个堆栈完全的响应式且非阻塞,适合于事件循环风格的处理,可以进行少量线程的扩展。
  • Reactive Streams 是来自于 Netflix, Pivotal, Typesafe, Red Hat, Oracle, Twitter 以及Spray.io 的工程师特地开发的一个 API。它为响应式编程实现的实现提供一个公共的 API,好实现Hibernate 的 JPA。这里 JPA 就是这个 API, 而 Hibernate 就是实现。
  • Reactive Streams API 是 Java 9 的官方版本的一部分。在 Java 8 中, 你会需要专门引入依赖来使用 Reactive Streams API。
  • Spring Framework 5.0 对于流式处理的支持依赖于 Project Reactor 来构建, 其专门实现了Reactive Streams API。
  • Spring Framework 5.0 拥有一个新的 spring-webflux 模块,支持响应式 HTTP 和 WebSocket 客户端。
  • Spring Framework 5.0 还提供了对于运行于服务器之上,包含了 REST, HTML, 以及 WebSocket 风格交互的响应式网页应用程序的支持。
  • 在 spring-webflux 中包含了两种独立的服务端编程模型:
    • 基于注解:使用到了@Controller 以及 Spring MVC 的其它一些注解;
    • 使用 Java 8 lambda 表达式的函数式风格的路由和处理。
    • 有 了 Spring Webflux, 你现在可以创建出 WebClient, 它是响应式且非阻塞的,可以作为RestTemplate 的一个替代方案。
  • 这里有一个使用 Spring 5.0 的 REST 端点的 WebClient 实现:
WebClient webClient = WebClient.create();
Mono person = webClient.get()
                .uri("http://localhost:8080/movie/42")
                .accept(MediaType.APPLICATION_JSON)
                .exchange()
                .then(response -> response.bodyToMono(Movie.class));

5 Junit5 支持

  • 完全支持 JUnit 5 Jupiter,所以可以使用 JUnit 5 来编写测试以及扩展。此外还提供了一个编程以及扩展模型,Jupiter 子项目提供了一个测试引擎来在 Spring 上运行基于 Jupiter 的测试。
  • 另外,Spring Framework 5 还提供了在 Spring TestContext Framework 中进行并行测试的扩展。
  • 针对响应式编程模型, spring-test 现在还引入了支持 Spring WebFlux 的 WebTestClient 集成测试的支持,类似于 MockMvc,并不需要一个运行着的服务端。使用一个模拟的请求或者响应, WebTestClient 就可以直接绑定到 WebFlux 服务端设施。
  • 可以在这里找到这个激动人心的 TestContext 框架所带来的增强功能的完整列表。
  • Spring Framework 5.0 仍然支持 JUnit!

6 依赖类库的更新

终止支持的类库

  • Portlet.
  • Velocity.
  • JasperReports.
  • XMLBeans.
  • JDO.
  • Guava.
  • 支持的类库
  • Jackson 2.6+
  • EhCache 2.10+ / 3.0 GA
  • Hibernate 5.0+
  • JDBC 4.0+
  • XmlUnit 2.x+
  • OkHttp 3.x+
  • Netty 4.1+

到此这篇关于Java_Spring之Spring5 的新特性的文章就介绍到这了,更多相关Java Spring5新特性内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Java_Spring之Spring5 的新特性

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Java_Spring之Spring5 的新特性

这篇文章主要介绍了Java_Spring中Spring5 的新特性,需要利用jdk8 版本更新的内容,依赖库更新,感兴趣的小伙伴可以参考阅读
2023-05-14

Java Spring之Spring5的新特性有哪些

这篇文章主要介绍“Java Spring之Spring5的新特性有哪些”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Java Spring之Spring5的新特性有哪些”文章能帮助大家解决问题。1
2023-07-05

Android5.0新特性详解之全新的动画

在Material Design设计中,为用户与app交互反馈他们的动作行为和提供了视觉上的连贯性。Material主题为控件和Activity的过渡提供了一些默认的动画,在android L上,允许自定义这些动画: Touch feed
2022-06-06

mysql8新特性之binlog_expire_logs_seconds浅析

MySQL8中新增了不少新特性,这些特性提高了数据库的安全性和性能,使数据库管理员能够更灵活地进行账户管理工作,下面这篇文章主要给大家介绍了关于mysql8新特性之binlog_expire_logs_seconds的相关资料,需要的朋友可以参考下
2023-02-28

Go语言的创新之处:新特性解析

Go语言的创新之处:新特性解析随着互联网技术的不断发展,越来越多的程序员开始关注Go语言,这门由Google开发的静态类型编程语言以其简洁、高效和并发特性备受推崇。Go语言自发布以来不断发展,不断推出新特性以提高开发效率和性能。本文将针对
Go语言的创新之处:新特性解析
2024-03-11

python3.7 的新特性

转载Python 3.7增添了众多新的类,可用于数据处理、针对脚本编译和垃圾收集的优化以及更快的异步I/O。Python这种语言旨在使复杂任务变得简单,最新版本Python 3.7已正式进入测试版发布阶段。Python 3.7的最终版定于2
2023-01-31

Java8新特性之Collectors.joining()实例详解

在项目中我们常常要对list集合的数据做一些字符串拼接/处理等相关操作,下面这篇文章主要给大家介绍了关于Java8新特性之Collectors.joining()的相关资料,需要的朋友可以参考下
2023-01-12

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录