总结Spring各个版本特点,让Spring的发展进化流程清晰展现,帮助大家理解Spring源码。
从maven 可以下载到Spring各个版本,但是早期版本没有提供源代码。

一、Spring 1.0

Spring1.0正式版发布于2004年3月,下面是Spring1.0的目录结构,可以看到当时的Spring还是一个项目,所有功能都在一个包里面。

二、Spring 2.0

Spring2.0正式版发布于2006年10月,此时的Spring还是一个完整的项目

1、Spring的XML配置引入XML Schema语法简化配置
在Spring1.x系列中,bean的配置文件使用DTD,没有namespace的分隔。2.0的一个非常大的改进是引入了XML Schema的namespace,因而可以将bean的配置文件做大幅度的简化。这些简化包括了对bean属性的各种简化,AOP配置的简化,事务配置的简化,JNDI配置的简化等方面。当然,在简化配置的同时,新的XML Schema实际上引入了更多的XML语法,因此使用一个支持XML Schema的XML Editor就显得非常必要了,例如Eclipse WTP就可以提供Schema的语法自动提示和校验功能。
Spring1.x的bean配置文件逐渐复杂烦琐化,是Spring历来被人所垢病的主要问题之一。在Spring2.0里面XML Schema语法的配置可以在相当程度上降低配置文件的复杂程度和烦琐程度,可以视为Spring的重大改进之一。但是我们也必须看到XML Schema并没有从根源上面解决XML配置复杂的问题,而只是减轻。
将所有的bean之间的依赖关系,组装关系统统使用XML来描述,本身就会导致XML阅读和修改一定的困难。并且用XML配置本身无法直接进行单元测试来验证依赖关系。因此,当bean之间关系越复杂的时候,XML配置文件本身的维护也是一个负担。
2、提供了request和session范围的bean
引入request scope和session scope的bean,我感觉是把双刃剑。对于普通的Java Web框架应用来说,和Servlet容器相关的操作应该限制在Web层,对于业务层来说,不应该涉及request和session的scope,否则业务层代码无法脱离Servlet容器进行单元测试。对于使用Webwork/Struts框架的用户来说,恐怕不太会使用该特性,另外根据我的理解,也许request/session scope的bean也是为了提供给Spring MVC的Controller使用的。
除此之外,对于AJAX Web Service调用来说,这一特性反而是很有用处的。对于这种应用场景,JS通过AJAX调用,抛开Web层框架,直接访问业务层bean,这个时候就需要提供request/session scope的bean了。
3、集成AspectJ,可以管理容器外对象,提供了领域模型的依赖注入
通常由Hibernate管理的持久化对象PO,并不是由Spring容器初始化的,往往是用户自己new出来,或者通过find,load方法创建的,其结果就是Spring容器无法对这种容器外创建的对象进行bean依赖关系注入。
在Spring2.0中,可以使用AspectJ对领域模型进行静态织入,这样当该领域模型在容器外被创建的时候,会产生对容器的回调,进行依赖关系的注入。
Spring2.0提供的这一特性,确保了Martin Folwer的Rich Domain Object的可行性,这一特性的提供恐怕会对未来很多Java系统的设计产生相当深远的影响。
其实针对Rich Domain Object更进一步,如果将DAO功能作为Domain Object的抽象父类,那么持久化对象PO就会集PO,DAO,Service对象于一身,整个业务层,持久层完全合并为一个对象,通过这种方式进行框架简化得到的结果就是,高度类似于ruby on rails的full-stack的MVC框架。
4、JPA支持
这一点其实没有什么可点评的,提供JPA支持本来就是理所应当之事。
5、JDBC的NamedParameterJdbcTemplate
NamedParameterJdbcTemplate我认为意义非凡,为JDBC查询提供了带命名参数的占位符,而不止是JDBC自己的“?”,这样使用JDBC的时候,也可以很容易的构造出来带占位符的动态条件查询,而不是参数值带入方式的拼接SQL字符串了。
6、Spring Web MVC功能的大幅度扩充
看的出来,在Spring2.0里面 Web MVC功能大幅度扩充,过去不提供的UI Taglib也终于提供了,配置文件也进行了必要的简化。虽然Spring MVC从框架设计角度来说远远不如Webwork那么有创意,但是也是一步一个脚印的改进,再配合上各种外围框架例如Spring Webflow等的支持,可以预见Spring MVC会成长为Webwork的劲敌。
7、支持动态语言ruby,groovy,beanshell
动态语言支持目前看来还比较简单,不够强大,但是表明了Spring的一个态度,其实我个人希望Spring能够加强这方面支持,甚至大胆一点,提供用动态脚本语言编写的bean组装配置。
8、异步JMS支持,JMX支持,JCA支持的功能完善[/color]
Spring2.0自身提供了两类简单的JMS Containter,此外还提供了外部JMS Server的接口,另外JMX功能的支持,JCA功能的支持都在进一步的完善过程中。
Spring2.0在这几个方面的功能支持不是那么引入注目,毕竟普通Java Web应用很少使用这些方面。但是Spring提供这些功能的完善支持意义却很深远,因为这些功能都是J2EE规范所要求提供的功能,也是传统应用服务器厂商相对比Java开源框架的传统优势项目。一旦Spring2.0对这些功能提供了完善的支持,那么将传统的Java企业应用完全迁移到Spring框架上面的技术障碍就一扫而空了。
因此Spring是一个野心很大的框架,从现在状况来看,Spring可以说是Java开源框架之集大成者,从未来来看,Spring将提供J2EE厂商所能够提供的所有必要的功能,最终Spring将有可能取J2EE规范而代之,成为Java企业开发的事实平台和事实标准。
总体来说,Spring2.0将向未来的宏大目标又迈进了一大步。不过对于我等普通Java Web项目的开发需求来说,2.0的新特性也没有特别需要的。

三、Spring 2.5

Spring 2.5正式版于2007年11月发布,Spring2.5是Spring2.1各个里程碑版本的终结。Spring2.5是对Spring2.0的增强,增加了一些新的特性。


Spring 2.5特性如下:
01、全面支持java6和javaEE5(JDBC 4.0, JTA 1.1, JavaMail 1.4, JAX-WS 2.0等)
02、全特性的注释 驱动依赖注入,包括对限定词的支持
03、支持基于classpath的组件扫描,自动侦测有注释的类
半注解开发(属性注入不用配置了,但是bean本身还是需要在xml中配置),
<context:annotationconfig/>
将隐式地向 Spring 容器注册 AutowiredAnnotationBeanPostProcessor、CommonAnnotationBeanPostProcessor、PersistenceAnnotationBeanPostProcessor 以及 RequiredAnnotationBeanPostProcessor这 4 个 BeanPostProcessor。
使用 @Required注解,就必须声明RequiredAnnotationBeanPostProcessor
使用@Resource、@PostConstruct、@PreDestroy等注解就必须声明 CommonAnnotationBeanPostProcessor
使用@PersistenceContext注解,就必须声明 PersistenceAnnotationBeanPostProcessor的Bean
使用@Autowire注解,就必须声明AutowiredAnnotationBeanPostProcessor
基本全注解开发(全部bean不用在xml中配置,可自动扫描包,xml中配置这个启动配置)
<context:component-scan base-package="com.tanlan.springdemo"></context:component-scan>
04、支持AspectJ切点表达式中包含bean name切点元素
05、内置AspectJ加载时编织,基于LoadTimeWeaver 提取
06、更多的XML配置文件的名字空间支持,比如context和jms等,最大程度提高编写的方便性
07、全面修订集成测试框架,支持JUnit4和TestNG
08、新的基于注释的Servlet MVC和Portlet MVC控制器风格配置
09、扩展SimpleJdbcTemplate功能,支持命名的参数等
10、官方认可的Websphere支持,支持WebSphere 6 UOWManager 机制
11、Spring框架的jar文件,兼容OSGi绑定,并能直接使用
12、Spring ApplicationContext可被部署为JCA RAR文件,用于非主导应用模块
13、JCA 1.5消息终端管理,用于Spring管理的JMS和CCI消息监听器
14、有重要价值的特性为,基于注释的MVC控制器风格,JAX-WS支持和TestNG支持。
15、分发包有三种形式,增加了最小标准zip包和包含文档的zip包。

三、Spring 3.0

Spring 3.0发布于2009年12月,此时的Spring已经将一个项目拆分成多个进行维护。用户在使用的时候也需要分别引入。

四、Spring 4.0

五、Spring 5.0

Spring各个版本的特性相关推荐

  1. Spring版本特性:Spring各个版本引入了哪些新特性?

    Spring是Rod Johnson在2004年推出的一个轻量级框架.对Java EE 系统框架臃肿.低效.脱离现实的种种现状提出了质疑,并积极寻求探索革新之道. spring 1.x时代 在这个时代 ...

  2. Spring 4.x版本新特性

    文章目录 版本历史 Spring 3.x Spring 4.x Spring 5.x Spring 4.x 各个子版本特性 Spring 4.0.x Spring 4.2.x Spring 4.3.x ...

  3. Spring版本特性--->Spring各个版本引入了哪些新特性?-1

    Spring各个版本引入了那些新特性 Spring版本支持与依赖 Spring Framework版本 Java 标准版 Java 企业版 1.x 1.3+ J2EE 1.3+ 2.x 1.4.2+ ...

  4. Spring5 版本新特性简述

    Spring 5 于2017 年9 月发布了通用版本(GA),它标志着自2013 年12 月以来第一个主要Spring Framework 版本.它提供了一些人们期待已久的改进,还采用了一种全新的编程 ...

  5. 我这样回答了Spring 5的新特性,面试官对我刮目相看 | 文末送书

    最近,有一个小伙伴拿到了自己满意的Offer,和他交谈的过程中得知他面试官问他关于Spring的问题比较多,其中最让面试官满意的就是自己回答关于Spring 5的知识点回答的不错. Spring5是2 ...

  6. 再见RestTemplate,Spring 6.1新特性:R

    百度面经总结 最近在准备面试,看了很多大厂的面经,抽空将百度面试的题目整理了一下,希望对大家有所帮助!************面经1shiro的组件分布式一致性算法zooke 山东五征集团有限公司冲压 ...

  7. spring历史版本对比

    一.Spring历史版本变迁 1.Spring 1.x 大概在2004年3月24日这一天,Spring Framework 1.0 final正式出现在我们的视野中,源码项目结构如下: 引用依赖如下: ...

  8. spring各版本jar包和源码

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

  9. Springboot版本+ Spring Framework版本 + jdk版本 + Maven版本

    Springboot版本+ Spring Framework版本 + jdk版本 + Maven版本的对应关系 Spring boot 版本 Spring Framework jdk 版本 maven ...

最新文章

  1. leetcode算法题--计算各个位数不同的数字个数
  2. 字节跳动面试题:“请你描述下 Spring Bean 的生命周期?”
  3. 开始看 汇编语言程序设计
  4. 查看环境列表_Xfce 4.14桌面环境正式发布,想要图形界面又想节省内存?就它了...
  5. matlab 输入方程组,弱弱地问,如何输入以下方程组?
  6. Spark : DNS resolution failed for url in bootstrap.servers xx:9092
  7. oracle序列的描述,Oracle同义词和序列的基本使用方法
  8. 红杉千万美元投资壁虎烘热游戏内置广告
  9. b站 前端构架_技术干货:哔哩哔哩(B站)功能框架图
  10. 需求分析模板_可以从哪些方面进行财务分析?财务分析模板实例拿去套用吧
  11. html录音并调用讯飞语音接口,微信小程序前台调用讯飞语音识别接口
  12. L2+/L3级智能驾驶功能量产,为何说侧向补盲激光雷达是必备传感器?
  13. python禅语_42:对象、类、以及从属关系
  14. 合作共赢:加密云储——穿针引线,布局IPFS分布式存储领域
  15. 计算机桌面音量键在哪,win7系统控制音量的快捷方式有哪些
  16. Python Basic - read()方法
  17. 简易公交车查询系统c语言,公交线路免费api接口代码
  18. 众人坐下以后,苏睿好不容易找来了几个茶碗
  19. phpnow切换php,PHPNOW如何升级PHP
  20. 互联网拓扑是怎样构成的?又代表了什么?

热门文章

  1. win7如何在登陆界面隐藏一个账户
  2. vue elementUI 路由跳转
  3. html怎么加一列单元格,excel表格怎么加一列
  4. 数据结构大作业:纯C双链表实现贪吃蛇
  5. Ubuntu16.04上网
  6. 使用jQuery改变元素的CSS样式
  7. 读取JPG图片的Exif属性(一) - Exif信息简介
  8. 2023 QQ强制聊天加好友临时会话接口跳转单页HTML源码
  9. Java常用类库以及简介,具体使用细节进行百度(爬虫爬取的数据)
  10. CoreDNS Windows