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 創新獎。

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 集合。

面向切面編程

面向切面編程（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 Framework（頁面存檔備份，存於網際網路檔案館）
  
* Spring Framework API（頁面存檔備份，存於網際網路檔案館）（Javadoc）
  
* http://www.springframework.org/dtd/spring-beans.dtd（頁面存檔備份，存於網際網路檔案館）
    
* http://www.springframework.org/docs/reference/springbeansdtd.html（頁面存檔備份，存於網際網路檔案館） (as HTML)

* Spring Framework .NET（頁面存檔備份，存於網際網路檔案館）

* 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)

* SpringHub （頁面存檔備份，存於網際網路檔案館）

* Domain Specific Modeling (DSM) in IoC frameworks（頁面存檔備份，存於網際網路檔案館）