Spring5的新特性

与JDK相关的升级

jdk版本要求:

spring5.0在2017年9月发布了它的GA(通用)版本。该版本是基于jdk8编写的,所以jdk8以下版本将无法使用。同时,可以兼容jdk9版本。

tomcat版本要求8.5及以上。

注:

我们使用jdk8构建工程,可以降版编译。但是不能使用jdk8以下版本构建工程。

由于jdk和tomcat版本的更新,我们的IDE也需要同时更新。(目前使用的eclipse 4.7.2)

利用jdk8版本更新的内容

第一:基于JDK8的反射增强

请看下面的代码:

package com.learn.test;import java.lang.reflect.Method;/*** * @author 黑马程序员* @Company http://www.ithiema.com* @Version 1.0*/
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;}}
}

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

第二:@NonNull注解和@Nullable注解的使用

用 @Nullable 和 @NotNull 注解来显示表明可为空的参数和以及返回值。这样就够在编译的时候处理空值而不是在运行时抛出 NullPointerExceptions。

第三:日志记录方面

Spring Framework 5.0 带来了 Commons Logging 桥接模块的封装, 它被叫做 spring-jcl 而不是标准的 Commons Logging。当然,无需任何额外的桥接,新版本也会对 Log4j 2.x, SLF4J, JUL ( java.util.logging) 进行自动检测。

核心容器的更新

Spring Framework 5.0 现在支持候选组件索引作为类路径扫描的替代方案。该功能已经在类路径扫描器中添加,以简化添加候选组件标识的步骤。

应用程序构建任务可以定义当前项目自己的 META-INF/spring.components 文件。在编译时,源模型是自包含的,JPA 实体和 Spring 组件是已被标记的。

从索引读取实体而不是扫描类路径对于小于 200 个类的小型项目是没有明显差异。但对大型项目影响较大。加载组件索引开销更低。因此,随着类数的增加,索引读取的启动时间将保持不变。

JetBrains Kotlin语言支持

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

响应式编程风格

此次 Spring 发行版本的一个激动人心的特性就是新的响应式堆栈 WEB 框架。这个堆栈完全的响应式且非阻塞,适合于事件循环风格的处理,可以进行少量线程的扩展。

Reactive Streams 是来自于 Netflix, Pivotal, Typesafe, Red Hat, Oracle, Twitter 以及 Spray.io 的工程师特地开发的一个 API。它为响应式编程实现的实现提供一个公共的 API,好实现 Hibernate 的 JPA。这里 JPA 就是这个 API, 而 Hibernate 就是实现。

Junit5支持

Spring Framework 5.0 仍然支持我们的老朋友 JUnit! 在我写这篇文章的时候, JUnit 5 还只是发展到了 GA 版本。对于 JUnit4, Spring Framework 在未来还是要支持一段时间的。

依赖类库的更新

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+

spring5新特性的介绍相关推荐

  1. Redis 6.0 新特性 ACL 介绍

    Redis 6.0 新特性 ACL 介绍 Intro 在 Redis 6.0 中引入了 ACL(Access Control List) 的支持,在此前的版本中 Redis 中是没有用户的概念的,其实 ...

  2. Spring5 新特性

    Spring5 新特性 Spring 5于2017年底发布.Spring 5为Spring框架带来了大量更新.Spring 4于2013年发布,因此每个人都期待对该框架进行重大改革.我很高兴看到Spr ...

  3. iOS10.3新特性图文介绍

    iOS10.3有哪些新特性?这是很多苹果用户关心的问题,那么下面小编就为大家带来iOS10.3新特性图文介绍,大家一起来看看吧! 1.新增查找我的AirPods功能 苹果为iOS 10.3加入查找Ai ...

  4. spring5新特性

    1 使用 lambda表达式定义bean 2 日志 spring4的日志是用jcl,原生的JCL,底层通过循环去加载具·体的日志实现技术,所以有先后顺序,spring5利用的是spring-jcl,其 ...

  5. jdk1.5-1.7新特性详细介绍

    jdk1.5新特性 1.泛型 2.foreach 3.自动拆箱装箱 4.枚举 5.静态导入(Static import) 6.元数据(Metadata) 7.线程池 8.Java Generics  ...

  6. jdk1.5、1.6、1.7新特性详细介绍(整理)

    jdk1.5新特性 1.泛型 2.foreach 3.自动拆箱装箱 4.枚举 5.静态导入(Static import) 6.元数据(Metadata) 7.线程池 8.Java Generics 让 ...

  7. ES7新特性_介绍--JavaScript_ECMAScript_ES6-ES11新特性工作笔记047

    然后我们来看es7中的两个新特性 首先来看第一个,用来判断,数组中是否包含某个元素 mingzhu.includes('') 可以看到其实就是数组对象.includes 可以看到包含返回true 不包 ...

  8. 64位 pb12 win7 数据源_PB12新特性及介绍PB资源控件下载

    PB12新特征及介绍 PowerBuilder 12:Fresh from the Labs PowerScript Language Enhancements for .NET Define an ...

  9. CSS3新特性详细介绍

    文章内容持续更新中~ 文章目录 一.CSS3实现圆角 - border-radius 二.盒子阴影 - box-shadow 三.文本阴影 - text-shadow 四.渐变 - gradient ...

最新文章

  1. DELL本本 执行SQL语句要FN+F5 如何更改成F5
  2. php获取当前周得周一_PHP怎样获得最近一个周一和上周一的日期?
  3. WordPress Plupload插件未明跨站脚本漏洞
  4. 大数据之-Hadoop环境搭建_hadoop目录结构---大数据之hadoop工作笔记0019
  5. 解决Ubuntu的root账号无法登录SSH问题-Permission denied, please try again.
  6. 观察者(Observer)模式
  7. 内存优化——使用pandas读取千万级数据
  8. 【教程】无需下载任何软件,使win10任务栏完全透明!
  9. ffmpeg 为取经而来_孙悟空很早之前就死了,取经的其实是六耳猕猴,这说法是真的吗?...
  10. C语言用梯形法求定积分
  11. 华为FusionSphere虚拟化解决方案
  12. 基于MATLAB的雷达的杂波模拟器
  13. Android 音视频开发相关知识
  14. 【太虚AR_v0.1】使用教程 | 图像识别(多目标)
  15. CSS——标签选择器,类选择器
  16. 计算机二级(c语言)重难点归纳--公共基础部分--计算机系统
  17. webpack系列:webpack小老弟接了个简单活
  18. 华为USG系列防火墙配置-带宽管理
  19. nginx temp缓存导致的诡异问题描述
  20. 中软python编码规范考试_中软国际面试经验

热门文章

  1. velocity 的 escape实现
  2. 第7章 Scrapy突破反爬虫的限制
  3. ArcGIS学习记录—KMZ KML与SHP文件互相转换
  4. Topcoder SRM 630div 2
  5. JAVA多线程-基础Lock Condition 并发集合
  6. SD-WAN的C级视图
  7. 架构书籍推荐:Java中高级、架构师值得一读!
  8. Python Numpy 笔记
  9. ubuntu 安装截图工具 Shutter,并设置快捷键 Ctrl+Alt+A
  10. [Java Web – Maven – 1A]maven 3.3.3 for windows 配置(转)