专栏首页Java周某人你了解Spring从Spring3到Spring5的变迁吗?
原创

你了解Spring从Spring3到Spring5的变迁吗?

你了解Spring从Spring3到Spring5的变迁吗?

前言:

**随着互联网技术的发展,Spring也在不断的进化,从最早轻量级的支持J2EE到现在对高并发,多线程异步程序的支持,spring也不断的更新自己走在技术的最前沿,我们先来从Spring3开始看看spring的发展变迁

Spring3

Spring4

Spring5

Spring Framework 4.x 和Spring Framework 3.2.x的架构变化

1.从图中可以看出,总体的层次结构没有太大变化,变化的是 Spring 4.0.3去掉了 struts 模块(spring-struts包)。增加 WebSocket 模块(spring-websocket包),增加了对 WebSocket、SockJS 以及 STOMP 的支持,它与 JSR-356 Java WebSocket API 兼容。另外,还提供了基于 SockJS(对 WebSocket 的模拟)的回调方案,以适应不支持 WebSocket 协议的浏览器。

2.同时增加了 messaging 模块(spring-messaging),提供了对 STOMP 的支持,以及用于路由和处理来自 WebSocket 客户端的 STOMP 消息的注解编程模型。spring-messaging 模块中还 包含了 Spring Integration 项目中的核心抽象类,如 Message、MessageChannel、MessageHandler。

3.如果去看源代码的话,还可以发现还有一个新增的包,加强了 beans 模块,就是 spring-beans-groovy。应用可以部分或完全使用 Groovy 编写。借助于 Spring 4.0,能够使用 Groovy DSL 定义外部的 Bean 配置,这类似于 XML Bean 声明,但是语法更为简洁。使用Groovy还能够在启动代码中直接嵌入Bean的声明。

4.对JDK的支持:Java 8支持。当然也支持Java6和Java7,但最好在使用Spring框架3.X或4.X时,将JDK升级到Java7,因为有些版本至少需要Java7。使用Spring4.x时Java EE版本至少要6或以上,且需要JPA 2.0和Servlet 3.0 的支持,所以服务器,web容器需要做相应的升级。一个更具前瞻性的注意是,Spring4.0支持J2EE 7的适用级规范,比如JMS 2.0, JTA 1.2, JPA 2.1, Bean Validation 1.1和JSR-236并发工具包,在选择这些jar包时需要注意版本。

5.核心容器提升:

支持Bean的泛型注入,比如:@Autowired Repository customerRepository

使用元注解开发暴露指定内部属性的自定义注解。

通过 @Ordered注解或Ordered 接口对注入集合或数组的 Bean 进行排序。

@Lazy 注解可以用在注入点或 @Bean 定义上。

为开发者引入 @Description 注解。

引入 @Conditional 注解进行有条件的 Bean过滤。

基于 CGLIB 的代理类不需要提供默认构造器,因为 Spring 框架将 CGLIB 整合到内部了。

框架支持时区管理,比如 LocalContext

5.Web提升

增加新的 @RestController 注解,这样就不需要在每个 @RequestMapping 方法中添加 @ResponseBody 注解。

添加 AsyncRestTemplate,在开发 REST 客户端时允许非阻塞异步支持。

为 Spring MVC 应用程序开发提供全面的时区支持。

Spring5

升级到 Java SE 8 和 Java EE 7

直到现在,Spring Framework 仍支持一些弃用的 Java 版本,但 Spring 5 已从旧包袱中解放出来。为了充分利用 Java 8 特性,它的代码库已进行了改进,而且该框架要求将 Java 8 作为最低的 JDK 版本。

在 API 级别上,Spring 5 兼容 Java EE 8 技术,满足对 Servlet 4.0、Bean Validation 2.0 和全新的 JSON Binding API 的需求。对 Java EE API 的最低要求为 V7,该版本引入了针对 Servlet、JPA 和 Bean Validation API 的次要版本。

反应式编程模型

Spring 5 最令人兴奋的新特性是它的反应式编程模型。Spring 5 Framework 基于一种反应式基础而构建,而且是完全异步和非阻塞的。只需少量的线程,新的事件循环执行模型就可以垂直扩展。

新的spring-webflux模块,一个基于reactive的spring-webmvc,完全的异步非阻塞,旨在使用enent-loop执行模型和传统的线程池模型。

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 124道全面且精准的大厂Java面试题分享

    金九银十到了程序员们的跳槽季,大家是不是都在紧张的准备着呢,本文准备了124道Java面试题分享给大家,由于文章篇幅的限制文中没有带答案哦,但是答案可以免费分享...

    Java周某人
  • 三年java经验面试总结,整理了一些java面试题供参考

    答:最大区别是等待时wait会释放锁,而sleep会一直持有锁,wait通常用于线程时交,互,sleep通常被用于暂停执行。

    Java周某人
  • 觉得Java性能调优很复杂吗,那是你不了解这11个实用技巧

    大多数开发人员理所当然地以为性能优化很复杂,需要大量的经验和知识。好吧,不能说这是完全错误的。优化应用程序以获得最佳性能不是一件容易的事情。但是,这并不意味着如...

    Java周某人
  • 推荐 | 6月份最值得看的 Java 技术干货

    6月过完了,这一年都 TM 过了一半了,大家都回想下自己这大半年,你都收获了什么??技术有提升吗?对象搞定了吗?

    Java技术栈
  • 这可能是进入BAT年薪50w最好的一次机会!

    作为世界第一编程语言,Java在编程界的地位毋庸置疑。当然,Java工程师也一直都是研发工程师里的重要角色。

    用户1257393
  • 第1章 Spring Boot史前简述小结参考资料

    大约20年前,程序员们使用“企业级Java Bean”(EJB)开发企业应用,需要配置复杂的XML。

    一个会写诗的程序员
  • 《Spring Boot极简教程》第1章 Spring Boot史前简述小结参考资料

    大约20年前,程序员们使用“企业级Java Bean”(EJB)开发企业应用,需要配置复杂的XML。

    一个会写诗的程序员
  • 【每天一道编程系列-2018.1.26】(Ans)

    Merge two sorted linked lists and return it as a new list. The new list should ...

    yesr
  • 如何使用Python的命令行参数——创建自己的Python命令行参数脚本的简单指南

    我们将使用Python 中的argparse模块来配置命令行参数和选项。argparse 模块可以让人轻松编写用户友好的命令行接口。程序定义它需要的参数,然后a...

    人工智能小咖
  • 行走在消失中的5种编程语言

    不少编程语言的寿命很长,因为企业和机构往往不愿意花费时间和资源去用新语言重写关键任务软件,因此一些重要系统上经常会有很多运行了数十年高龄的编程语言写的代码,例如...

    前朝楚水

扫码关注云+社区

领取腾讯云代金券