Spring历史版本变迁和如今的生态帝国

 
 
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/bntX2jSQfEHy7/article/details/78918119

前两篇:

为什么要有Spring?

为什么要有Spring AOP?

前两篇从Web开发史的角度介绍了我们在开发的时候遇到的一个个坑,然后一步步衍生出Spring Ioc和Spring AOP的概念雏形。Spring从2004年第一个正式版1.0 Final Released发展至今,俨然已经成为了一个生态帝国(开局只有一把枪,装备全靠打!),目前也已经迭代到5.0,拥有诸多的子项目,基本可以解决绝大多数场景的应用!

而在进一步学习Spring的核心原理之前,有必要和大家一起梳理一下Spring历史版本的变迁,知晓一下每一个版本新增了哪些东西,解决了哪些我们开发中的问题,以便我们更清楚的理解这个生态帝国是如何一步一发展壮大的!

一、Spring历史版本变迁

1、Spring 1.x

大概在2004年3月24日这一天,Spring Framework 1.0 final正式出现在我们的视野中,源码项目结构如下:

引用依赖如下:

Spring 1.0当时只包含一个完整的项目,他把所有的功能都集中在一个项目中,其中包含了核心的Ioc、AOP,同时也包含了其他的诸多功能,例如:JDBC、Mail、ORM、事务、定时任务、Spring MVC等。

由于Spring超前的眼光和博大的精神,在第一个版本的时候已经支持了很多第三方的框架,例如:Hibernate、ibatis、模板引擎等。

尽管如此,此时的Spring除了最核心的Ioc和AOP之外,其他的模块犹如我们现在众多的开源项目一样,大多是对第三方框架的简单封装!我也相信很多个人或企业也基本都维护了一套类似这种的框架供项目开发使用。

此时的Spring还很懵懂,只支持基于XML的配置!关于更多关于Spring 1.0 的信息可以参考:

https://spring.io/blog/2004/03/24/spring-framework-1-0-final-released

2、Spring 2.x

Spring 2.x的源码项目结构如下:

引用依赖如下:

通过上图中和1.0版本的对比,我们首先可以很直观的感受到Spring做了哪些改变。

Spring 2.x增加对注解的支持,支持了基于注解的配置。

3、Spring 3.x

Spring在GitHub托管的代码,最早的版本只能看到Spring v3.1.0.M2(https://github.com/spring-projects/spring-framework),源码结构如下:

Spring 3.x支持了基于Java类的配置。

4、Spring 4.x

(1)Spring 4.x新特性:

Spring 4.x全面支持Java 8.0,支持Lambda表达式的使用,提供了对@Scheduled和@PropertySource重复注解的支持,提供了空指针终结者Optional,对核心容器进行增加:支持泛型的依赖注入、Map的依赖注入、Lazy延迟依赖的注入、List注入、Condition条件注解注入、对CGLib动态代理类进行了增强。

Spring 4.x还支持了基于Groovy DSL的配置,提高Bean配置的灵活性。

Spring 4.x开始,Spring MVC基于Servlet 3.0 开发,并且为了方便Restful开发,引入了新的RestController注解器注解,同时还增加了一个AsyncRestTemplate支持Rest客户端的异步无阻塞请求。

(2)简单的思维导图如下:

5、Spring 5.x

Spring 5.x主要新特性:

6、小结

Spring 1.x、Spring 2.x、Spring 3.x由于版本比较久,而我从开始就是从Spring 4.0 开始用的,所以更多关于以前版本的信息这里解释的不是很全,上述的源码截图只是作为一种直观地感受,希望能感受到Spring版本的变迁过程。

二、Spring如今的生态帝国

Spring从最初的一城一池,发展到如今已经发展为一个生态帝国,旗下拥有诸多的子项目,从最基本的Spring Ioc/AOP使用,到安全管理,再到大数据,Spring已经逐渐的渗入到各个领域。目前,几乎所有JavaWeb相关的开发都可以在Spring中找到合适的方案,为了在开发的时候,防止重造轮子,下边梳理一下Spring的各个子项目,做到心中有数:

参考文章:

1、《精通Spring 4.x企业应用开发实战》

 

 

转:Spring历史版本变迁和如今的生态帝国的更多相关文章

  1. [转]Spring历史版本变迁和如今的生态帝国

    前两篇: 为什么要有Spring? 为什么要有Spring AOP? 前两篇从Web开发史的角度介绍了我们在开发的时候遇到的一个个坑,然后一步步衍生出Spring Ioc和Spring AOP的概念雏 ...

  2. spring官网上下载历史版本的spring插件,springsource-tool-suite

    spring官网下载地址(https://spring.io/tools/sts/all),历史版本地址(https://spring.io/tools/sts/legacy). 注:历史版本下载的都 ...

  3. 奇技淫巧:在spring官网上下载历史版本的spring插件,springsource-tool-suite

    转自:https://blog.csdn.net/PacosonSWJTU/article/details/80959689 目前spring官网(http://spring.io/tools/sts ...

  4. hibernate 各历史版本下载 spring各历史版本下载

    hibernate 各历史版本下载http://sourceforge.net/projects/hibernate/files/ spring各历史版本下载http://www.springsour ...

  5. 在spring官网上下载历史版本的spring插件,springsource-tool-suite

    目前spring官网(https://spring.io/tools3/sts/all)上可下载的spring插件只有: ECLIPSE ARCHIVE SIZE 4.9.0 springsource ...

  6. Jdk和Spring Boot版本选择

    ==========================版本选择的原则:==========================1. 优先选择官方指定的long-term support(LTS)版本, 非L ...

  7. spring各版本jar包和源码

    spring各版本jar包和源码 spring历史版本源码:https://github.com/spring-projects/spring-framework/tags spring历史jar包和 ...

  8. 清空Github上某个文件的历史版本

    title: 清空Github上某个文件的历史版本 author: 青南 date: 2015-01-08 16:04:53 categories: [经验] tags: [Github,histor ...

  9. [.net 面向对象程序设计深入](4)MVC 6 —— 谈谈MVC的版本变迁及新版本6.0发展方向

    [.net 面向对象程序设计深入](4)MVC 6 ——谈谈MVC的版本变迁及新版本6.0发展方向 1.关于MVC 在本篇中不再详细介绍MVC的基础概念,这些东西百度要比我写的全面多了,MVC从1.0 ...

随机推荐

  1. 如何注册一个google账号

    注册过google账号的人都知道,在注册的过程中会需要短信验证. 可我大天朝偏偏连这个都锁了,导致根本验证不了. 所以,经过网上方法的不断尝试,排除了很多的方法:例如使用qq邮箱注册等,现在已经不能用 ...

  2. Python学习案例之视频人脸检测识别

    前言 上一篇博文与大家分享了简单的图片人脸识别技术,其实在实际应用中,很多是通过视频流的方式进行识别,比如人脸识别通道门禁考勤系统.人脸动态跟踪识别系统等等. 案例 这里我们还是使用 opencv 中 ...

  3. 使用try-with-resources优雅的关闭IO流

    Java类库中包括许多必须通过调用close方法来手工关闭的资源.例如InputStream.OutputStream和java.sql.Connection.客户端经常会忽略资源的关闭,造成严重的性 ...

  4. MySQL Connector/C++ 8.0 源码编译

    平台 ubuntu 16.04 参考文档: https://dev.mysql.com/doc/dev/connector-cpp/8.0/building.html 下载源码 访问 https:// ...

  5. 前端可视化项目流程,涉及three.js(webGL),3DMax技术,持续更新

    最近在做一个可视化展示的项目,记录一下流程: 建模,模型来源,可以参考沙盘展示类项目,自己建模或者拼装其他源模型(本人以前是3D建模师,可以应付一些简单的场景) 有效模型导入到web端,这里采用的ob ...

  6. 第一章 Python基本语法元素

    1.1   程序设计基本方法 计算机的概念: (1)功能性:对数据的操作,表现为数据计算.输出输出处理和结果存储等 (2)可编程性:根据一系列指令自动地.可预测地.准确地完成操作者的意图. 计算机的发 ...

  7. [ffmpeg] 滤波

    ffmpeg中有很多已经实现好的滤波器,这些滤波器的实现位于libavfilter目录之下,用户需要进行滤波时,就是是调用这些滤波器来实现的.ffmpeg对于调用滤波器有一整套的调用机制. 基本结构 ...

  8. [数据库] windows server 2003下mysql出现10048错误的解决办法 Can't connect to MySQL server on '127.0.0.1' (10048)(抄)

    网站访问量大了的时候mysql连接数自然就多了,当超出mysql最大连接数的时候就会出现错误,当出现too many字样的错误的时候一般是因为连接数的问题,只需要修改最大连接数max_conectio ...

  9. [LOJ3088][GXOI/GZOI2019]旧词——树链剖分+线段树

    题目链接: [GXOI/GZOI2019]旧词 对于$k=1$的情况,可以参见[LNOI2014]LCA,将询问离线然后从$1$号点开始对这个点到根的路径链修改,每次询问就是对询问点到根路径链查询即可 ...

  10. Day 2 上午

    内容提要: 二叉搜索树 二叉堆 区间RMQ问题 二叉搜索树 前置技能本节课可能用到的一些复杂度:O(log n). n/1+n/2+...+n/n=O(n log n) 入门题: 给出N次操作,每次加 ...