Spring Framework

Spring框架是 Java 平臺的一個開源的全棧（full-stack）應用程序框架和控制反轉容器實現，一般被直接稱為 Spring。該框架的一些核心功能理論上可用於任何 Java 應用，但 Spring 還為基於Java企業版平臺構建的 Web 應用提供了大量的拓展支持。Spring 沒有直接實現任何的編程模型，但它已經在 Java 社區中廣為流行，基本上完全代替了企業級JavaBeans（EJB）模型。
Spring框架以 Apache License 2.0 開源許可協議的形式發佈，該框架最初由 Rod Johnson 以及 Juergen Hoeller 等人開發。

**版本歷史**
第一版由 Rod Johnson (programmer) 開發，並在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 創新獎。
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版本。值得注意的是，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）的支持能力，是一個非常大的進步。

**核心功能模塊**
 強大的、基於 JavaBeans 的、採用控制反轉（Inversion of Control，IoC）原則的 配置管理，使得應用程序的組建更加簡易快捷。- 一個可用於 Java EE 等運行環境的核心 Bean工廠。- 數據庫事務的一般化抽象層，允許聲明式（Declarative）事務管理器，簡化事務的劃分使之與底層無關。- 內建的針對 JTA 和單個 JDBC 數據源的一般化策略，使Spring的事務支持不要求 Java EE 環境，這與一般的 JTA 或者 EJB CMT 相反。- 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集合。

**-{zh-hans:面向切面程序設計;zh-hant:剖面導向程式設計;zh-tw:特性導向程式設計;}-**
-{zh-hans:面向切面程序設計;zh-hant:剖面導向程式設計;zh-tw:特性導向程式設計;}-（Aspect-Oriented Programming, AOP） 就是將那些與業務無關，卻為業務模塊所共同調用的邏輯或責任分開封裝起來，便於減少系統的重複代碼，降低模塊間的耦合度，並有利於未來的可操作性和可維護性。

**數據訪問（DAO層支持）**
Spring Data實現了對數據訪問接口的統一，支持多種數據庫訪問框架或組件（如：JDBC、Hibernate、MyBatis（iBatis））作為最終數據訪問的實現。

**事務管理**
Spring框架為事務管理提供了一致的抽象，具有以下優點：- 跨不同事務API（如：Java事務、JDBC、Hibernate和Java Persistence API事務（JPA））的一致編程模型- 支持聲明式事務- 與諸如JTA之類的複雜事務API相比，用於程序化事務管理的API更簡單- 與Spring的數據訪問抽象出色地集成

**模型-視圖-控制器（MVC）**
Spring MVC 實現了基於 MVC 設計方法的實現，結合基於Java註解的配置，允許開發者開發出低代碼侵入的Web應用項目，並簡便地實現大部分Web功能（包括請求參數注入、文件上傳控制等）。

**遠程訪問 **

**“約定大於配置”的快速應用開發**

**Spring Boot**
Spring Boot是基於Spring Framework 4.0衍生的，用於快速搭建獨立的基於生產級別的Spring應用的框架，可以以最小的依賴引入來構建一個Spring應用。並且它還具有以下特點：- 擁有嵌入式的Tomcat, Jetty, Undertow或者Reactor Netty（無需部署war文件）- 儘可能地自動配置（@AutoConfiguration）Spring和第三方庫- 提供用於生產的功能，例如指標、運行狀態檢查和外部化配置- 無需麻煩而冗餘的XML配置，一切都可以使用Java配置

**批處理**

**整合框架**

**相關鏈接**
  Spring Frameworkdate=20140609193631 
**  Spring Framework APIdate=20140608124106 （Javadoc）
** http://www.springframework.org/dtd/spring-beans.dtddate=20060425054557 
*** http://www.springframework.org/docs/reference/springbeansdtd.htmldate=20060428223906  (as HTML)-  Spring Framework .NETdate=20060402205922 -  Spring Framework MVC Tutorialdate=20060425075408 - Simple Spring Demodate=20150705064622 -  Introduction to the Spring Framework by Rod Johnsondate=20060425191259 - The Spring Reference Documentationdate=20060629103457 （PDF，1329 kb）- Rod Johnson et al. (2004-2005)-  SpringHub date=20060423010507 -  Domain Specific Modeling (DSM) in IoC frameworksdate=20071115185128 

**參考資料**
分類:Java企業平臺