Spring Framework

![]() | 此條目可参照英語維基百科相應條目来扩充。 (2019年6月18日) |
開發者 | Pivotal |
---|---|
首次发布 | 2002年10月1日 |
当前版本 | 5.0.4.RELEASE [1](2018年2月19日 ) |
源代码库 | |
编程语言 | Java |
操作系统 | 跨平台 |
平台 | JVM |
类型 | Application framework |
许可协议 | Apache License 2.0 |
网站 | spring |
Spring框架是 Java 平台的一个开源的全栈(Full-stack)应用程序框架和控制反转容器实现,一般被直接称为 Spring。该框架的一些核心功能理论上可用于任何 Java 应用,但 Spring 还为基于Java企业版平台构建的 Web 应用提供了大量的拓展支持。Spring 没有直接实现任何的编程模型,但它已经在 Java 社区中广为流行,基本上完全代替了企业级JavaBeans(EJB)模型。
Spring框架以 Apache License 2.0 开源许可协议的形式发布,该框架最初由 Rod Johnson 以及 Juergen Hoeller 等人开发。
版本历史
第一版由 Rod Johnson 开发,并在2002年10月发布在 Expert One-on-One J2EE Design and Development 一书中。2003年6月,Spring Framework 第一次发布在 Apache 2.0 许可证下。2004年3月,发布了里程碑的版本1.0,2004年9月以及2005年3月,又发布了新的里程碑版本。2006年,Spring Framework 获得了 Jolt 生产力奖 和 JAX 创新奖。[2][3]
2006年10月发布Spring 2.0,2007年11月 Spring 2.5,2009年12月 Spring 3.0,2011年 Spring 3.1,2013年11月 Spring 3.2.5,2013年12月发布了4.0版本。[4]值得注意的是,Spring 4.0 版本中增加了对 Java SE 8, Groovy 2, Java EE 7 的一些方面以及 WebSocket 的支持。
2017年9月 Spring Framework 正式发布了 5.0 版本,此版本引入了 Spring WebFlux,一个高性能、响应式、异步的 Web 框架。Spring 5.0 重点加强了对函数式编程、响应式程序设计(reactive programming)的支持能力,是一个非常大的进步。
核心功能模块
- 数据库事务的一般化抽象层,允许声明式(Declarative)事务管理器,简化事务的划分使之与底层无关。
- JDBC 抽象层提供了有针对性的异常等级(不再从 SQL 异常中提取原始代码),简化了错误处理,大大减少了程序员的编码量。再次利用 JDBC 时,你无需再写出另一个'终止'(finally)模块。并且面向 JDBC 的异常与 Spring 通用数据访问对象(Data Access Object)异常等级相一致。
- 以资源容器,DAO 实现和事务策略等形式与 Hibernate,JDO 和 MyBatis 、SQL Maps 集成。利用控制反转机制全面解决了许多典型的 Hibernate 集成问题。所有这些全部遵从 Spring 通用事务处理和通用数据访问对象异常等级规范。
- 灵活的基于核心 Spring 功能的 MVC 网页应用程序框架。开发者通过策略接口将拥有对该框架的高度控制,因而该框架将适应于多种呈现(View)技术,例如 JSP、FreeMarker、Velocity、Thymeleaf 等。值得注意的是,Spring 中间层可以轻易地结合于任何基于 MVC 框架的网页层,例如 Struts、WebWork 或 Tapestry。
- 提供诸如事务管理等服务的AOP框架。
在设计应用程序 Model 时,MVC模式(例如 Struts)通常难于给出一个简洁明了的框架结构。Spring 却具有能够让这部分工作变得简单的能力。程序开发员们可以使用Spring的JDBC抽象层重新设计那些复杂的框架结构。
IOC(Inverse Of Control)控制反转,即把创建对象的权利交给框架,也就是指将对象的创建、对象的存储、对象的管理交给了spring容器。
(spring容器是spring中的一个核心模块,用于管理对象,底层可以理解为是一个map集合)
之前我们当需要对象时,通常是利用new关键字创建一个对象:
——/* 获取Service接口的子类实例 ——* 这里使用new对象的方式造成了程序之间的耦合性提升 */ —— private EmpService service = new EmpServiceImpl(); ——//private EmpService service = (EmpService)BeanFactory.getBean("EmpService");
但由于new对象,会提高类和类之间的依赖关系,即代码之间的耦合性。
而现在我们可以将对象的创建交给框架来做:
——/* 获取Service接口的子类实例 ——* 这里使用new对象的方式造成了程序之间的耦合性提升 */ ——//private EmpService service = new EmpServiceImpl(); ——private EmpService service = (EmpService)BeanFactory.getBean("EmpService");
只需要将类提前配置在配置文件中,就可以将对象的创建交给框架来做。当需要对象时,不需要自己创建,而是通过框架直接获取即可,省去了new对象的过程,自然就降低类和类之间的依赖关系,也就是耦合性。
处理访问(DAO层支持)
Spring框架为事务管理提供了一致的抽象, 具有以下优点:
+ 跨不同事务API(如Java事务JTA. JDBC, Hibernate和Java Persistence API事务JPA)的一致编程模型
+ 支持声明式事务
+ 与诸如JTA之类的复杂事务API相比, 用于程序化事务管理的API更简单
+ 与Spring的数据访问抽象出色集成
模型-视图-控制器(MVC)
Spring MVC
“约定大于配置”的快速应用开发
Spring Boot
Spring Batch
整合框架
相关链接

- Spring Framework MVC Tutorial
- Simple Spring Demo
- Introduction to the Spring Framework by Rod Johnson
- The Spring Reference Documentation(PDF,1329 kb)- Rod Johnson et al. (2004-2005)
参考资料
- ^ https://projects.spring.io/spring-framework Spring Framework Projects
- ^ Jolt winners 2006
- ^ JAX Innovation Award Gewinner 2006 (页面存档备份,存于互联网档案馆)
- ^ Spring Framework 3.2.5 Released. Official Spring website. 7 Nov 2013 [16 October 2016].