#Spring的历史java
- 2004年发布以第一个版本
- 2006年从v1.0版本升级到v2.0(新增XML命名空间,AspectJ及Spring MVC等功能),2009年从v2.5升级到了v3.0,新增了SpEL,OXM,REST,验证/格式化等功能,全面支持java5
- 2013年从v3.0升级到了v4.0,新增了Groovy Bean配置,HTML5/WebSocket支持等功能,全面支持Java8.0
- 2016 年发布Spring Framework 5.0 里程碑版本(后续仍需学习)
#Spring带来的好处 Spring提供了EJB相似服务的同时尽量的简化了开发,遵循了“好的涉及因为具体实现,代码应该易于测试”这一个理念,带给咱们一个易于开发,便于测试且功能恰u你的开发框架,好处有以下几点:编程
- SpringIoC方便解耦,简化开发。
- AOP编程支持,实现了面向切面的编程,实现了OOP没法实现的功能。
- 声明式事务的支持。开发者能够从繁琐的事务管理代码中脱离出来,声明式事务灵活的进行事务管理,提升开发效率和质量。
- 方便程序的测试。能够用非容器依赖的编程方式进行几乎全部的测试工做。测试再也不是安规的操做,而是随手可得的事情。
- 方便集成各类优秀的框架。Spring不排斥各类优秀的框架
- 下降Java EE API的使用难度。Spring对很对难用的Java EE API(如JDBC,JavaMail,远程调用等)提供了一个薄层的封装,经过Spring的简单的封装,这些API的调用就会很方便,极大的下降了使用的难度。
- Java的源代码式经典的学习范例。代码的巧妙涉及,结构的清晰,到处体现大师级的水准。
#Spring体系结构 Spring的框架结构大体以下:数组

IoC
-
Spring核心模块实现了IoC的功能,用配置的房间将类与类之间的依赖从代码中脱离出来。IoC负责将类与类之间的建立,拼接,管理,获取等工做。BeanFactory接口是Spring框架的核心接口,它实现了容器的许多核心的功能。框架
Context模块构建再核心模块之上,拓展BeanFactory的功能,添加i18n国籍化,Bean生命周期控制,框架时间体系,资源加载透明化等多项功能。提供了企业级服务的支持,好比邮件服务,任务调度,JNDI获取,EJB集成,远程访问等。ApplicationCtenxt是Context模块的核心接口。模块化
表达式语言模块是统一表达式语言的(Unifier EL)的一个拓展,该表达式语言用于查询和管理运行期的对象,支持设置/获取对象属性,调用对象方法,操做数组,集合等。该模块还提供了逻辑表达式运算,变量定义等功能,能够方便的经过表达式串和Spring IoC容器进行交互。函数
AOP
- AOP是OOP以后,对编程思想影响极大的技术之一。AOP是进行横切逻辑的编程思想,它开拓了考虑问题的思路。知足AOP Alliance规范,整合了AspectJ这种AOP框架。Spring实现AOP编程有总舵的选择。Java5引入了java。lang.instrument,容许再JVM启动一个代理,经过核心代理类再运行期修改类的字节码,改变一个类的功能,从而实现AOP的功能。
数据访问和集成
-
应用的核心问题是对数据的访问和操做。数据形式有多种,如数据表,XML,消息等,每种数据形式都用于不一样的数据访问技术(如数据表的访问及能够直接同JDBC,也能够是使用其余的ORM框架)工具
Spring站在DAO的抽象层,创建一套面向DAO的脱衣的异常体系,将各类访问疏忽的检查型异常转换为非检擦型异常,为整合各类持久层框架提供基础。其次,Spring经过模块化技术对各类数据访问技术进行薄层的封装,将模式化的代码隐藏起来,是数据访问的程序获得大幅度的简化。这样Spring就创建起了和数据形式及访问技术无关的统一的DAO,借助AOP技术,Spring提供了声明式事务的功能。学习
Web及远程操做
- 该模块创建在Application Context模块之上,提供了Web应用的各类工具类,如经过Listener或者Servlet初始化的Spring容器,将Spring容器注册到Web容器中。该模块还提供了多项面向Web的功能,透明化文件上传,Velocity,FreeMarker,XSLT的支持。此外,Spring能够整合Struts,WebWork等MVC框架。
Web及远程访问
- Spring本身提供了一个完整得相似于Struts得MVC框架--SpringMvc
WebSocket
WebSocket提供了一个在Web应用中高效得,双向得通讯,考虑了客户端和夫妻之间得高频和低延时消息交换。测试
#Spring4新特性.net
- 全面支持了Java8.0
- 核心容器的加强 支持泛型依赖注入 CgLib代理类的加入不须要提供空参构造函数 在基于Java的配置里面添加@Descriotion,@Conditional实现Bean的田间过滤,@Lazy注解解决Bean验实依赖注入,支持Bean被注入List或者Array是可使用@Ordered排序