返回顶部
首页 > 资讯 > 精选 >Java Spring之Spring5的新特性有哪些
  • 759
分享到

Java Spring之Spring5的新特性有哪些

2023-07-05 22:07:11 759人浏览 泡泡鱼
摘要

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

这篇文章主要介绍“Java spring之Spring5的新特性有哪些”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“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)运行时间如下:

    Java Spring之Spring5的新特性有哪些

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

    Java Spring之Spring5的新特性有哪些

    有此我们可以看出,在反射创建对象上,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 模块,支持响应式 Httpwebsocket 客户端。

    • 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的新特性有哪些”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注编程网精选频道,小编每天都会为大家更新不同的知识点。

    --结束END--

    本文标题: Java Spring之Spring5的新特性有哪些

    本文链接: https://lsjlt.com/news/355624.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    猜你喜欢
    • Java Spring之Spring5的新特性有哪些
      这篇文章主要介绍“Java Spring之Spring5的新特性有哪些”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Java Spring之Spring5的新特性有哪些”文章能帮助大家解决问题。1 ...
      99+
      2023-07-05
    • Java_Spring之Spring5 的新特性
      目录1 与 JDK 相关的升级1.1 jdk 版本要求:1.2 利用 jdk8 版本更新的内容2 核心容器的更新3 JetBrains Kotlin 语言支持4 响应式编程风格5 J...
      99+
      2023-05-14
      Java Spring5新特性 Spring5新特性
    • Spring5新特性之Reactive响应式编程
      目录1 什么是响应式编程2 回顾Reactor2.1 什么是Reactor2.2 为什么是Reactor2.3 Reactor模式的经典实现—Netty3 Spring5...
      99+
      2024-04-02
    • JAVA 8新特性有哪些
      这篇文章主要介绍“JAVA 8新特性有哪些”,在日常操作中,相信很多人在JAVA 8新特性有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”JAVA 8新特性有哪些”的疑惑...
      99+
      2024-04-02
    • java 1.8新特性有哪些
      这篇“java 1.8新特性有哪些”文章,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要参考一下,对于“java 1.8新特性有哪些”,小编整理了以下知识点,请大家跟着小编的步伐一步一步的慢慢理解,接下来就让我们进入...
      99+
      2023-06-06
    • Spring的特性有哪些
      Spring的特性有哪些?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。Spring引入传统的基于mvc的项目框架结构:Entity / dao / servic...
      99+
      2023-05-31
      spring
    • html5的新特性有哪些
      这篇文章主要介绍html5的新特性有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!新增的元素html5新增了一些语义化更好的标签元素。结构元素article元素,表示页面中的一块...
      99+
      2024-04-02
    • HTLM的新特性有哪些
      本篇内容主要讲解“HTLM的新特性有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“HTLM的新特性有哪些”吧!1.Flash被HTML5取代Flash绘图 ...
      99+
      2024-04-02
    • Node18的新特性有哪些
      本篇内容介绍了“Node18的新特性有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1. 原生支持fe...
      99+
      2024-04-02
    • Java15的新特性有哪些
      本篇内容主要讲解“Java15的新特性有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java15的新特性有哪些”吧!新特性JDK 15 新特性一览表:IDJEPFeature1339Edw...
      99+
      2023-06-16
    • Python3.9的新特性有哪些
      这篇文章主要讲解了“Python3.9的新特性有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python3.9的新特性有哪些”吧!1. 词典联合运算符这是我最喜欢的功能之一,语法非常优...
      99+
      2023-06-16
    • Go1.16的新特性有哪些
      本篇内容介绍了“Go1.16的新特性有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!前几天 Go 官方正式发布了 1.16 版本。从这个...
      99+
      2023-06-15
    • Kubernetes1.4的新特性有哪些
      这篇文章主要介绍“Kubernetes1.4的新特性有哪些”,在日常操作中,相信很多人在Kubernetes1.4的新特性有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Kubernetes1.4的新特性...
      99+
      2023-06-28
    • Laravel10的新特性有哪些
      今天小编给大家分享一下Laravel10的新特性有哪些的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。Laravel 10现已...
      99+
      2023-07-05
    • spring4的新特性有哪些
      这篇文章给大家介绍spring4的新特性有哪些,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。从Spring4开始,Spring以Servlet3为进行开发,如果用Spring MVC 测试框架的话需要指定Servlet...
      99+
      2023-05-31
      spring
    • es6的新特性有哪些
      es6的新特性有:1、块级作用域,可以在块级作用域中声明变量;2、箭头函数,一种新的函数声明方式;3、解构赋值,一种从数组或对象中提取值并赋值给变量的语;4、默认参数,允许在函数定义时为参数提供默认值;5、扩展运算符,可以将数组或对象展开,...
      99+
      2023-08-04
    • Java面向未来的新特性有哪些
      这篇文章给大家分享的是有关Java面向未来的新特性有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Java。作为与万维网共同发展成长的编程工具,几乎没有任何一种其它语言能够像它这样从始至终对Web应用程序作出...
      99+
      2023-06-17
    • Java JDK15的新特性和变化有哪些
      这篇文章主要介绍了Java JDK15的新特性和变化有哪些的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Java JDK15的新特性和变化有哪些文章都会有所收获,下面我们一起来看看吧。OpenJDK 15的新特...
      99+
      2023-06-27
    • Spring工厂特性有哪些
      这篇文章主要介绍了Spring工厂特性有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、饿汉式创建优势工厂创建之后,会将Spring配置文件中的所有对象都创建完成(饿汉...
      99+
      2023-06-15
    • MySQL8.0新特性有哪些
      这篇文章给大家分享的是有关MySQL8.0新特性有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。1、 默认字符集由latin1变为utf8mb4在8.0版本之前,默认字符集为...
      99+
      2024-04-02
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作