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. 《JAVA程序设计》_第七周学习总结

    一.学习内容 1.String类--8,1知识 Java专门提供了用来处理字符序列的String类.String类在java.lang包中,由于java.lang包中的类被默认引入,因此程序可以直接使 ...

  2. 001_python实现数据分析

    一. # coding:utf8 # !/usr/bin/python # import numpy as np import pandas as pd import np def example2( ...

  3. Elastic Stack-Elasticsearch使用介绍(五)

    一.前言     前4篇将Elasticsearch用法的API和原理方面东西介绍了一下,相信大家对Elasticsearch有了一定的认知,接下我们主要从索引的建立到后期的一些优化做一些介绍: 二. ...

  4. iOS 关于监听手机截图,UIView生成UIImage, UIImage裁剪与压缩的总结

    一.  关于监听手机截图 1. 背景: 发现商品的售价页总是被人转发截图,为了方便用户添加截图分享的小功能 首先要注册用户截屏操作的通知 - (void)viewDidLoad { [super vi ...

  5. js 对象 类型转换

    对象不相等 var o = {x: 1}, p = {x: 1}; console.log(o == p); console.log(o === p); var arr1 = [], arr2 = [ ...

  6. JS实现 阿拉伯数字金额转换为中文大写金额 可以处理负值

    JS实现 阿拉伯数字金额转换为中文大写金额 可以处理负值 //************************* 把数字金额转换成中文大写数字的函数(可处理负值) ****************** ...

  7. CMDB(Configuration Management Database)资产管理系统和 运维自动化

    一.传统运维方式和自动化运维的区别 二.CMDB的介绍 三.CMDB的四种方式 四.项目的目录架构介绍以及配置文件的升级编写 五.比较low的项目架构书写 六.可插拔式收集资产 七.对收集的服务器信息 ...

  8. Java中的String,StringBuilder,StringBuffer

    String被final修饰,不可变,每次更改其实是重新创建了一个对象.StringBuilder,StringBuffer是可变的. StringBuffer是线程安全的,StringBuilder ...

  9. CentOS_7下安装PHP7.3

    安装mysql:https://www.cnblogs.com/jiangml/p/10402390.html 下载PHP安装包: 官网:http://www.php.net/downloads.ph ...

  10. Oracle字符串行拆分成列的三种方式

    Oracle字符串行拆分成列的三种方式 --muphy 开发过程中经常会遇到将前台多个值用逗号连接一同传递到后台查询,这个用逗号连接的字符串分隔的每个字符串分别对应Oracle数据库表的不同行. 如下 ...