Spring版本与JDK版本演变

news2025/1/14 1:16:55

Java各版本变更核心API

Java8

  • lambada表达式
  • 函数式接口
  • 方法引用
  • 默认方法
  • Stream API 对元素流进行函数式操作
  • Optional 解决NullPointerException
  • Date Time API
  • 重复注解 @Repeatable
  • Base64
  • 使用元空间Metaspace代替持久代(PermGen space)

Java7

  • switch 支持String字符串类型
  • try-with-resources,资源自动关闭
  • 整数类型能够用二进制来表示
  • 数字常量支持下划线
  • 泛型实例化类型自动推断,即”<>”
  • catch捕获多个异常类型,用(|)分隔开
  • 全新的NIO2.0 API
  • Fork/join 并行执行任务的框架

Java6

  • java.awt新增Desktop类和SystemTray类
  • 使用JAXB2来实现对象与XML之间的映射
  • 轻量级 Http Server API
  • 插入式注解处理API(lombok使用该特性来实现的)
  • STAX,处理XML文档的API
  • Compiler API
  • 对脚本语言的支持(ruby, groovy, javascript)

Java 5

  • 泛型(本质是参数化类型,解决不确定具体对象类型的问题)
  • 增强的for循环(for-each)
  • 自动装箱和自动拆箱(包装类型有:Integer,Double,Float,Long,Short,Character和Boolean)
  • 类型安全的枚举(enum)
  • 可变长度参数
  • 静态引入(import static)
  • 元数据(注解)
  • 线程并发库(java.util.concurrent)

java1.4(2004)

  • XML解析器
  • Java打印服务
  • Logging API(日志功能)
  • Java Web Start
  • JDBC 3.0 API(jdbc高级)
  • 断言
  • Preferences API
  • 链式异常处理
  • 支持IPV6
  • 支持正则表达式
  • 引入Imgae I/O API (图片流);
  • NIO(高级流)
  • XSLT转换器

java1.3 (2000)

  • Timer API(时间)
  • Java Sound API(声音)
  • RMI通信协议
  • jar文件索引
  • 优化和增强

java1.2 (1998)

  • J2SE/J2EE/J2ME
  • EJB
  • Java IDL(平台对象请求代理体系结构)
  • 集合框架
  • JIT(Just In Time)编译器
  • 数字签名
  • JFC(Java Foundation Classes), 包括Swing1.0, 拖放和Java2D类库
  • Java Plug-In(运行插件)
  • JDBC中引入可滚动结果集,BLOB,CLOB,批量更新和用户自定义类型
  • Applet中添加声音支持
  • 字符串常量做内存映射
  • 控制授权/访问系统资源的策略工具

java1.1 (1997)

  • JAR
  • JDBC
  • JavaBean
  • RMI(远程调用)
  • Inner Class(内部类)
  • Reflection(反射)

Spring对JDK API的实践

小于Java 5 API

反射

JDK 1.1中引入反射机制。Spring Framework 1.0+版本对JDK要求是1.3以上,因此,Spring 1.0中肯定可以使用到JDK 1.1的反射特性,代表实现是MethodMatcher。

动态代理

JDK 1.3中引入动态代理,Spring Framework 1.0+中的代表实现是JdkDynamicAopProxy。

JDK 5

XML

JDK 5版本引入XML处理(DOM、SAX),在Spring中的代表实现是XmlBeanDefinitionReader,其作用是:读取xml配置文件中的信息读取为BeanDefinition。

BeanDefinition描述了Spring容器中的Bean的配置元数据,定义了如何创建、配置和管理Bean的信息,包括Bean的类名、作用域、属性值、构造函数参数、依赖关系等。

Instrumentation
Java语言提供的一个API,它允许开发人员在运行时修改、转换和监控Java应用程序的字节码。Instrumentation API通常与Java代理技术(如字节码增强或动态代理)结合使用,用于实现各种功能和行为的增强。

Spring Agent是Spring框架提供的一个Java代理技术,用于增强应用程序的功能和行为。它通过字节码操纵技术,在应用程序运行时动态地修改和增强类的行为。

在Spring中,使用Instrumentation的典型实现是:InstrumentationSavingAgent,其功能是把Instrumentation的功能存储到本地,实现字节码的增强,Spring中的各种Agent实现都是基于JDK的Instrumentation。

J.U.C

J.U.C即 package java.util.concurrent,是Java提供的并发框架包。在Spring 3.0版本后提供了ThreadPoolTaskScheduler实现。它是Spring提供的一个任务调度器,用于在后台线程池中执行定时任务和异步任务。它是基于线程池的调度器,可以提供可靠的任务执行和调度管理。

Formatter

实现国际化,不同格式时间类型转换。

JDK 6

JDBC 4.0

Java 6中引入JDBC 4.0规范,代表实现是JdbcTemplate。

Java Compiler API

Java Compiler API是Java语言提供的一组API,允许开发人员在运行时动态地编译和执行Java源代码。它提供了一种在Java应用程序中编译Java源代码的方式,从而实现动态代码生成、扩展和增量编译等功能。

在Spring 5.0后,单元测试TestCompiler间接使用了Java Compiler API,以实现在测试中动态编译和加载类。

可插拔注解处理器API

可插拔处理器允许开发人员编写自定义的注解处理器,用于在编译时处理和操作注解信息。

可插拔注解处理器API的主要类和接口包括:

  1. javax.annotation.processing.Processor:这是一个注解处理器的接口,定义了注解处理器的基本行为和方法。开发人员需要实现这个接口来创建自定义的注解处理器。
  2. javax.annotation.processing.AbstractProcessor:这是Processor接口的一个抽象实现,提供了一些默认的方法和辅助工具,简化了注解处理器的实现。
  3. javax.annotation.processing.RoundEnvironment:这个接口提供了当前编译轮次(Round)的环境信息,包括可以处理的注解和对应的元素(Element)。

JDK 7

Fork/Join

Fork/Join是JDK 7提出的新特性,在Spring 3.1开始使用Fork/Join的新特性,其代表实现就是ForkJoinPoolFactoryBean。

ForkJoinPoolFactoryBean的主要作用是:创建ForkJoinPool实例,并对其进行配置线程池参数,如:并行级别、线程工厂、线程命名前缀等,还可以对ForkJoinPool进行全生命周期的管理和控制。

NIO 2

NIO 2(New I/O 2)是 Java 提供的一种用于非阻塞 I/O 操作的新的 I/O API。它是 Java NIO(New I/O)的改进版本,引入了许多新的功能和改进,旨在提高 I/O 操作的效率和可扩展性。

在Spring 4.0后出现的PathResource典型实现,PathResource 是 Spring Framework 中的一个资源实现类,用于表示基于文件系统路径的资源(文件和路径分开)。它实现了 Resource 接口,提供了对文件系统路径资源的访问和操作。

JDK 8

Date And Time API

Date And Time API,是JDK 8引入新的日期和时间API,也称为JDK 8引入了新的日期和时间API,也称为Java 8 Date and Time API或java.time包。这个API提供了更加全面、易于使用和线程安全的日期和时间处理功能,相比于旧的java.util.Date和java.util.Calendar(since 1.1)类,它提供了更多的灵活性和功能。

在Spring 4.0后基于Date And Time API实现的是:DateTimeContext,它提供了动态切换时间上下文功能,用于更灵活的处理日期和时间的操作。

可重复 Annotations

在 JDK 8 中,引入了可重复注解(Repeatable Annotations)的功能。这个功能允许在同一个元素上多次使用相同的注解类型,以前的注解使用方式只能在一个元素上使用一次。

在使用可重复注解之前,如果我们想在同一个元素上应用多个相同类型的注解,我们需要将这些注解放在一个容器注解(Container Annotation)中。例如:

@ContainerAnnotation({
    @MyAnnotation("value1"),
    @MyAnnotation("value2")
})
public class MyClass {
    // Class body
}

上述代码中,我们使用了一个容器注解 @ContainerAnnotation 来包含多个相同类型的注解 @MyAnnotation。

使用可重复注解之后,我们可以直接在同一个元素上多次使用相同的注解类型,而不需要额外的容器注解。例如:

@MyAnnotation("value1")
@MyAnnotation("value2")
public class MyClass {
    // Class body
}

在Spring 4.0后,@PropertySources用于指示 Spring 应用程序加载多个属性源(property sources)。它通常与 @PropertySource 注解一起使用,用于指定要加载的属性源文件。@PropertySources 注解的作用是将多个 @PropertySource 注解组合在一起,以便一次性加载多个属性源文件。这样可以方便地将应用程序的配置信息分散在多个属性文件中,而不是集中在一个文件中。

@Configuration
@PropertySources({
    @PropertySource("classpath:config/app.properties"),
    @PropertySource("file:/etc/myapp/config.properties")
})
public class AppConfig {
    // Configuration beans and other definitions
}

Stream

JDK 8版本新特性中,Stream流和函数式接口可能是最大的变更特征。在Spring 4.2版本后,提供了StreamConverter的实现,其作用是将一个类型的流转为另一个类型的流。

public class StreamConverterExample {
    public static void main(String[] args) {
        Stream<Integer> integerStream = Stream.of(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
        convert(integerStream, Object::toString).forEach(System.out::println);
    }

    public static <T, R> Stream<R> convert(Stream<T> stream, StreamConverter<T, R> converter) {
        return stream.map(converter::convert);
    }


    @FunctionalInterface
    interface StreamConverter<T, R> {
        R convert(T input);
    }
}
CompletableFuture

CompletableFuture是J.U.C包提供的一个多线程异步操作类,如将耗时操作放入线程池中异步执行,而不会阻塞主线程,以提高程序的并发性和响应性。

适配器设计模式:适配器设计模式的主要作用是使不兼容的接口能够协同工作。它允许将一个类的接口转换为另一个类所期望的接口,从而使这两个类能够协调合作,无需修改其原始代码。

在Spring 4.2 CompletableToListenableFutureAdapter 的主要意义在于提供了一个桥梁,使得在使用 Spring 框架的异步特性时能够与使用 Java 8 的 CompletableFuture 的代码进行兼容和协作。

CompletableToListenableFutureAdapter 的主要意义在于提供了一个桥梁,使得在使用 Spring 框架的异步特性时能够与使用 Java 8 的 CompletableFuture 的代码进行兼容和协作。

CompletableToListenableFutureAdapter 的意义体现在以下几个方面:

  1. 兼容性:通过适配器,CompletableFuture 对象可以转换为 ListenableFuture 对象,使得使用 Spring 框架的代码可以与使用 CompletableFuture 的代码进行兼容。这样,不需要修改现有的 CompletableFuture 代码,就可以在 Spring 的异步环境中使用它们。
  2. 互操作性:使用适配器,可以在 Spring 框架中使用 CompletableFuture 对象。这使得可以在 Spring 的异步操作中利用 CompletableFuture 提供的丰富方法,例如使用 thenApply 进行流水线操作、使用 thenCompose 进行组合操作等。同时,也可以在使用 CompletableFuture 的代码中与 Spring 的异步特性进行协作,例如将 CompletableFuture 对象传递给使用 ListenableFuture 的方法。
  3. 扩展性:适配器的存在使得 Spring 框架可以更容易地与未来的 Java 异步编程模型进行集成。如果未来出现了新的异步编程工具,可以通过创建适当的适配器来使其与 Spring 的 ListenableFuture 进行兼容。

感谢您读到这里,不胜感激。

如果您对笔者其他文章感兴趣,可以扫一扫关注笔者的公众号:种颗代码技术树

公众号文章更新更及时,以及一些程序员周边相关更新。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/961066.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

哈希表与有序表

哈希表与有序表 Set结构 key Map结构 key-value 哈希表 哈希表的时间复杂度都是常数项级别的&#xff0c;但常数较大 增删改查的时间都是常数级别的&#xff0c;与数据量无关 当哈希表存储的值是基础数据类型&#xff08;Integer - int&#xff09;&#xff0c;哈希表中内…

第6讲:利用VBA获得指定行、列中最后一个非空单元格

【分享成果&#xff0c;随喜正能量】修行佛法从哪儿下手呢&#xff1f;要从信心下手。佛法大海&#xff0c;唯信能入。三皈依就是世间获得吉祥如意&#xff0c;出世间获得究竟解脱的正因&#xff0c;慎勿退失&#xff0c;谨守修行。。 《VBA代码解决方案》(10028096)这套教程是…

一种改进多旋翼无人机动态仿真的模块化仿真环境研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

详细的SAP的付款条件测试

详细的SAP的付款条件测试 正好需要看一个清账日期的问题&#xff0c;然后重新理了一下付款条件&#xff0c;特此记录&#xff0c;省的后面每次都要捋一遍。其实真正能做到按照条件付款的良心企业很少。 付款条件修改事务码&#xff1a;OBB8 1、凭证日期作为基准&#xff0c;…

迅镭激光大幅面光纤激光切割机中标全球最大航运企业中国远洋海运!

征程万里阔&#xff0c;奋斗正当时! 今年以来&#xff0c;迅镭激光锚定战略目标&#xff0c; 坚持以市场为导向&#xff0c;稳中求进、守正创新&#xff0c; 各业务板块持续发力&#xff0c;频频中标多个行业龙头企业! 近日&#xff0c;公司再次传来好消息&#xff0c;中标全球…

存储型XSS获取网站后台

首先&#xff0c;在XSS平台获取一个地址 将XSS代码存在可能存在XSS漏洞的留言框 管理员登录和查看留言信息即会触发XSS 然后就可以利用cookie直接进入后台

JavaScript页面怎么跳转

在JavaScript中&#xff0c;可以使用window.location对象来实现页面跳转。window.location对象包含了当前页面的URL信息&#xff0c;可以通过修改它的属性来实现页面跳转。 以下是一些常见的页面跳转方式&#xff1a; 使用window.location.href属性来跳转到一个新的URL&#…

【二】kubernetes master单节点拓展为集群

#服务器 #部署 #云原生 #k8s 一、 前言 一、ubuntu20.04上搭建containerd版&#xff08; 1.2.4 以上&#xff09;k8s及kuboard V3 接上文中&#xff0c;我们已经部署好了单节点master的k8s集群&#xff0c;在生产环境中&#xff0c;单节点的master肯定是不行的&#xff0c;那…

论文阅读_变分自编码器_VAE

英文名称: Auto-Encoding Variational Bayes 中文名称: 自编码变分贝叶斯 论文地址: http://arxiv.org/abs/1312.6114 时间: 2013 作者: Diederik P. Kingma, 阿姆斯特丹大学 引用量: 24840 1 读后感 VAE 变分自编码&#xff08;Variational Autoencoder&#xff09;是一种生…

9.1作业

字体对话框、颜色对话框、文件对话框、保存和打开文件 widget.cpp #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }void W…

rtsp 拉流 gb28181 收流 经AI 算法 再生成 rtsp server (一)

1、 rtsp 工具 1 vlc 必备工具 2 wireshark 必备工具 3 自己制作的工具 player 使用tcp 拉流&#xff0c;不自己写的话&#xff0c;使用ffmpeg 去写一个播放器就行 4 live555 编译好live555&#xff0c; 将live555的参数修改以下&#xff0c;主要是缓存大小 文章使用c 来写一…

Git的基本使用笔记——狂神说

版本控制 版本迭代&#xff0c; 版本控制( Revision control)是一种在开发的过程中用于管理我们对文件、目录或工程等内容的修改历史&#xff0c;方便查看更改历史记录&#xff0c;备份以便恢复以前的版本的软件工程技术。 实现跨区域多人协同开发 追踪和记载一个或者多个文件的…

如何利用 Instagram Stories 促进小型企业发展

图片来源&#xff1a;SaleSmartly官网 社交媒体的存在对于小型企业来说是必须的。最近的一项研究表明&#xff0c;大约 80% 的客户在向小型企业购买产品之前会进行在线研究&#xff0c;超过 60% 的小型企业投资社交媒体营销以提供相关信息并吸引客户。 流行的社交媒体平台多种多…

2023年05月 C/C++(五级)真题解析#中国电子学会#全国青少年软件编程等级考试

第1题&#xff1a;问题求解 给定一个正整数N&#xff0c;求最小的M满足比N大且M与N的二进制表示中有相同数目的1。 举个例子&#xff0c;假如给定N为78&#xff0c;二进制表示为1001110&#xff0c;包含4个1&#xff0c;那么最小的比N大的并且二进制表示中只包含4个1的数是83&a…

软件测试之“支付功能”测试

01、测试思维 要分析测试点之前&#xff0c;我们先来梳理一下测试思维。总结来说&#xff0c;任何事物的测试思路都可以总结如下&#xff1a; 第一步&#xff1a;梳理产品的核心业务流程&#xff1a;明白这是个什么项目&#xff0c;实现了什么业务&#xff0c;以及是怎么实现…

三、定长内存池

三、定长内存池 我们知道申请内存使用的是malloc&#xff0c;malloc其实就是一个通用的大众货&#xff0c;什么场景下都可以使用&#xff0c;而什么场景下都可以用就意味着什么场景下都不会有很高的性能&#xff0c;下面我们就先来设计一个定长内存池作为一个开胃菜&#xff0…

全能图片转文字:多功能图片处理软件

全能图片转文字是一款支持将图片文件实时转换为文字的处理软件。该软件可以帮助用户快速地获取图片文件中的文字内容&#xff0c;减少人工摘录的时间和成本&#xff0c;同时具备图片转excel、智能配音及PDF编辑等其他热门功能&#xff0c;轻松满足办公、学习中的各类需求。支持…

基于costas环的载波同步系统matlab性能仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 ............................................................................ I_Dataroun…

2001-2022年全国各区县最低工资数据

2001-2022年全国各区县最低工资数据 1、时间&#xff1a;2001-2022年 2、来源:人社部 3、指标&#xff1a;年份、行政区划代码、地区、所属省份、所属城市、经度、纬度、最低工资-每月、最低工资-小时 4、样本量&#xff1a;5.5万条 5、指标解释&#xff1a;最低工资标准是…

使用 Node-RED 构建 DolphinDB 低代码平台

前言 DolphinDB 是由浙江智臾科技有限公司研发的一款高性能分布式时序数据库&#xff0c;集成了功能强大的编程语言和高容量高速度的流数据分析系统&#xff0c;为海量结构化数据的快速存储、检索、分析及计算提供一站式解决方案。DolphinDB 数据库支持每秒百万级数据写入&…