前几篇:
Spring核心技术原理-(1)-通过Web开发演进过程了解一下为什么要有Spring?
Spring核心技术原理-(2)-通过Web开发演进过程了解一下为什么要有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正式出现在我们的视野中,源码项目结构如下:
![v2-17cb4b6557ded788973c2cbd8ffec70e_b.jpg](http://img-02.proxy.5ce.com/view/image?&type=2&guid=a3918c66-1c2f-eb11-8da9-e4434bdf6706&url=https://pic3.zhimg.com/v2-17cb4b6557ded788973c2cbd8ffec70e_b.jpg)
引用依赖如下:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring</artifactId>
<version>1.0</version>
</dependency>
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的源码项目结构如下:
![v2-0d2a609908775134303f8ee0a3bd0355_b.jpg](http://img-02.proxy.5ce.com/view/image?&type=2&guid=a3918c66-1c2f-eb11-8da9-e4434bdf6706&url=https://pic2.zhimg.com/v2-0d2a609908775134303f8ee0a3bd0355_b.jpg)
引用依赖如下:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring</artifactId>
<version>2.0</version>
</dependency>
通过上图中和1.0版本的对比,我们首先可以很直观的感受到Spring做了哪些改变。
Spring 2.x增加对注解的支持,支持了基于注解的配置。
3、Spring 3.x
Spring在GitHub托管的代码,最早的版本只能看到Spring v3.1.0.M2(https://github.com/spring-projects/spring-framework),源码结构如下:
![v2-5e2b21d564cfea25f006572c6e0369d9_b.jpg](http://img-03.proxy.5ce.com/view/image?&type=2&guid=a3918c66-1c2f-eb11-8da9-e4434bdf6706&url=https://pic2.zhimg.com/v2-5e2b21d564cfea25f006572c6e0369d9_b.jpg)
Spring 3.x支持了基于Java类的配置。
4、Spring 4.x
![v2-b640e7cf0e3703e7da0f52239c3e6c5a_b.jpg](http://img-02.proxy.5ce.com/view/image?&type=2&guid=a3918c66-1c2f-eb11-8da9-e4434bdf6706&url=https://pic3.zhimg.com/v2-b640e7cf0e3703e7da0f52239c3e6c5a_b.jpg)
(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)简单的思维导图如下:
![v2-e89870a6607d80100598be09a54dcf8d_b.jpg](http://img-01.proxy.5ce.com/view/image?&type=2&guid=a3918c66-1c2f-eb11-8da9-e4434bdf6706&url=https://pic2.zhimg.com/v2-e89870a6607d80100598be09a54dcf8d_b.jpg)
5、Spring 5.x
![v2-67dbf35ac4f0316295c86823908962ea_b.jpg](http://img-02.proxy.5ce.com/view/image?&type=2&guid=a3918c66-1c2f-eb11-8da9-e4434bdf6706&url=https://pic3.zhimg.com/v2-67dbf35ac4f0316295c86823908962ea_b.jpg)
Spring 5.x主要新特性:
![v2-c77a2c36331c6dba627395fe11b1fa02_b.jpg](http://img-01.proxy.5ce.com/view/image?&type=2&guid=a3918c66-1c2f-eb11-8da9-e4434bdf6706&url=https://pic3.zhimg.com/v2-c77a2c36331c6dba627395fe11b1fa02_b.jpg)
6、小结
Spring 1.x、Spring 2.x、Spring 3.x由于版本比较久,而我从开始就是从Spring 4.0 开始用的,所以更多关于以前版本的信息这里解释的不是很全,上述的源码截图只是作为一种直观地感受,希望能感受到Spring版本的变迁过程。
二、Spring如今的生态帝国
Spring从最初的一城一池,发展到如今已经发展为一个生态帝国,旗下拥有诸多的子项目,从最基本的Spring Ioc/AOP使用,到安全管理,再到大数据,Spring已经逐渐的渗入到各个领域,目前,几乎所有JavaWeb相关的开发都可以在Spring中找到合适的方案,为了在开发的时候,防止重造轮子,下边梳理一下Spring的各个子项目,做到心中有数:
![v2-54cf9102740fcb9e88c9d943bc31d6ae_b.jpg](http://img-01.proxy.5ce.com/view/image?&type=2&guid=a3918c66-1c2f-eb11-8da9-e4434bdf6706&url=https://pic3.zhimg.com/v2-54cf9102740fcb9e88c9d943bc31d6ae_b.jpg)
参考文章:
1、《精通Spring 4.x企业应用开发实战》