1. 引言
Spring 框架提供了一種簡潔而表達力強的編程和配置模型,適用於現代基於 Java 的企業應用程序,可在任何部署平台上運行。
本文概述了 Spring 框架的高層架構,主要介紹 org.springframework 包,該包為依賴注入、事務管理、Web 應用程序、數據訪問、消息傳遞和測試等提供了支持。
2. 功能
Spring 框架提供了一系列全面的功能:
- Spring MVC Web 應用程序和 RESTful Web 服務框架
- 面向方面編程,包括 Spring 的聲明式事務管理
- 依賴注入
- 控制反轉
以及更多。
3. Maven 依賴
如果您想將 Spring 添加到您的 Maven 項目中,可以在這裏找到更多相關信息。
4. Spring 項目
該框架包含多個不同的模塊和項目。從配置到安全,從 Web 應用到大數據 – 無論您的應用程序所需的任何基礎設施需求,都有一款 Spring 項目可以幫助您構建它。
從小處着手,只使用您需要的內容 – Spring 採用模塊化設計。下面我們來了解一下這些項目。
4.1. Spring Web MVC
Spring Web MVC 框架提供 Model-View-Controller 架構,圍繞着一個 DispatcherServlet 構建,該Servlet處理所有HTTP請求和響應,並使應用程序具有鬆耦合的特性。
其優勢在於它允許您使用任何對象作為命令或表單對象,無需實現特定於框架的接口或基類。 它的數據綁定非常靈活:例如,它將類型不匹配視為可以由應用程序評估的驗證錯誤,而不是系統錯誤。
您可以在這裏找到完整的 指南。
4.2. Spring IO 平台
Spring IO 平台 定義了一組依賴項(包括 Spring Framework 依賴項和第三方庫),可以包含在 Java 項目中,以便您無需擔心不同版本之間的兼容性(因為 Spring IO 保證了這一點)。
該平台已認證可在 Java 7 和 8 上運行。
請查看 GitHub 項目。
4.3. Spring Boot
Spring Boot 使得創建獨立的、生產級別的基於 Spring 的應用程序變得輕鬆。“只需運行”即可。它極大地簡化了使用 Spring 構建應用程序的過程,所需工作量最小。
使用它創建的應用程序可以很大程度上進行自動配置,並具有合理的默認設置,同時還可以通過添加指標(例如請求數量、請求耗時等)進行改進。
它由幾個(可選)模塊組成:
- CLI – 基於 Groovy 的命令行界面,用於啓動/停止 Spring Boot 創建的應用程序。
- Boot Core – 其他模塊的基礎。
- Auto-configure – 用於自動配置廣泛的 Spring 項目的模塊。它會檢測到某些框架(Spring Batch、Spring Data JPA、Hibernate、JDBC)的可用性。
- Actuator – 當添加此項目時,它將啓用某些企業功能(安全性、指標、默認錯誤頁面)到您的應用程序中。
- Starters – 作為 Maven 或 Gradle 構建文件中的依賴項的不同快速啓動項目。它將包含該類型應用程序所需的依賴項。目前,對於 Web 項目(基於 Tomcat 和 Jetty)、Spring Batch、Spring Data JPA、Spring Integration、Spring Security 存在啓動器項目。
- Tools – Maven 和 Gradle 構建工具以及自定義 Spring Boot 啓動器(用於單個可執行的 jar/war)包含在此項目。
我們可以在此處找到 Maven 藝術品 這裏,並查看 GitHub 項目。
4.4. Spring Data
Spring Data 的使命是在提供一種熟悉且一致的、基於 Spring 的編程模型,用於數據訪問,同時保留底層數據存儲的特殊特性。
該項目的主要目標是簡化構建使用新興數據訪問技術(如非關係數據庫、MapReduce 框架和基於雲的數據服務)的 Spring 應用程序,並提供對關係數據庫技術的改進支持。
這是一個傘形項目,包含許多特定於特定數據庫的子項目(例如,JPA、MongoDB、Redis、Apache Solr、Gemfire、Apache Cassandra)。這些項目由許多支持這些激動人心的技術的公司和開發者共同開發。
4.5. Spring Security
Spring Security 是一個專注於為 Java 應用程序提供身份驗證和授權的框架。 就像所有 Spring 項目一樣,Spring Security 的真正優勢在於它能夠輕鬆地擴展以滿足自定義需求。 它採用 Apache 2.0 許可證 發佈,因此您可以自信地將其用於您的項目中。
它也易於學習、部署和管理。 它具有專門的安全命名空間,該命名空間為大多數常見操作提供指令,從而可以在幾行 XML 中實現應用程序的完整安全,並可以保護應用程序免受會話固定、點擊劫持、跨站請求偽造等攻擊。
Spring Security 還與許多其他 Spring 技術集成,包括 Spring Web Flow、Spring Web Services 和 Pivotal tc Server。
請參閲 Spring Security 常見問題解答 以獲得更深入的見解,以及 Maven 依賴頁面。 此外,請查看 Spring Security 教程,瞭解身份驗證、註冊和使用 Maven 設置 Spring Security。
<h3><strong>4.6. Spring Social</strong></h3
<p><a href="https://github.com/spring-attic/spring-social" rel="nofollow">Spring Social</a> 是一個擴展,它允許應用程序連接到軟件即服務提供商,例如 Twitter、Facebook 和其他基於 <a href="http://oauth.net/" rel="nofollow">OAuth</a> 身份驗證的 API。 它提供了一個用於基於 Web 應用程序的就用式 OAuth 身份驗證框架。</p>
<h4>功能:</h4>
<ul>
<li>一個可擴展的提供商服務框架,極大地簡化了將本地用户帳户連接到託管提供商帳户的過程。</li>
<li>一個連接控制器,它處理您 Java/Spring Web 應用程序、服務提供商和用户之間的授權流程。</li>
<li>Java 綁定到流行的服務提供商 API,例如 Facebook、Twitter、LinkedIn、TripIt 和 GitHub。</li>
<li>一個 sign-in 控制器,它允許用户通過在服務提供商處登錄來驗證身份。</li>
</ul>
<h4>入門指南:</h4>
<ul>
<li><a href="https://docs.spring.io/spring-social-facebook/docs/current/reference/htmlsingle/index.html" rel="nofollow">訪問 Facebook 數據</a></li>
<li>Spring Social Twitter 設置</li>
<li>輔助 Facebook 登錄</li>
</ul>
<p>Spring 提供了許多示例 <a href="https://github.com/spring-projects/spring-social-samples">GitHub</a> 項目,以幫助您快速上手,並且 <a href="http://docs.spring.io/spring-social/docs/current/reference/htmlsingle/">Spring Social 參考</a> 也很實用,並且有一個 <a href="https://github.com/spring-projects/spring-social/wiki/Quick-Start">快速入門</a> 頁面。</p>
4.7. Spring Shell
Spring Shell 是一個交互式 shell,可以通過基於 Spring 的編程模型輕鬆擴展命令。
Shell 項目的用户可以輕鬆地通過依賴 Spring Shell jar 包並添加自己的命令(這些命令作為 Spring Bean 中的方法)來構建一個功能齊全的 shell(即命令行)應用程序。 創建命令行應用程序在與您的項目 REST API 交互或處理本地文件內容方面非常有用 例如。
4.8. Spring Mobile
Spring Mobile 是框架的擴展,以及 Spring Web MVC,旨在簡化移動 Web 應用程序的開發。
Spring Mobile 是一個框架,它提供檢測請求的設備類型並根據設備類型提供替代視圖的能力。 就像所有 Spring 項目一樣,Spring Mobile 的真正力量在於它能夠輕鬆擴展。
功能:
- 一個用於服務器端檢測移動設備和平板電腦類型的設備解析器
- 站點偏好管理,允許用户指示他或她更喜歡“正常”、“移動”或“平板電腦”體驗
- 一個站點切換器,能夠根據用户的設備和可選的站點偏好,將用户切換到最合適的站點,即移動、平板電腦或正常站點
- 設備感知視圖管理,用於組織和管理特定設備的不同視圖
此 示例應用程序 將幫助您快速上手。
您還可以 檢測設備,處理 網站偏好,或使用 Spring MVC 提供移動 Web 內容。
4.9. Spring Batch
Spring Batch 是一種輕量級、全面的框架,旨在促進企業系統日常運營中批量應用程序的開發。
在本文檔中,“批量應用程序”指的是針對大批量數據處理的自動化離線系統。 Spring Batch 自動化了這種基本的批量迭代過程,提供了在離線環境中,無需用户交互,以一組相似的事務進行處理的能力。
Spring Batch 通過配置可用的分塊大小(chunk size)從數據源讀取數據,進行處理,並最終將其寫入資源。
數據源的讀取器可以是文本文件、XML 文件、CSV 文件等平面文件,也可以是 MySQL 等關係數據庫,或者 MongoDB。
同時,寫入器可以寫入平面文件、關係數據庫、MongoDB、郵件發送器等。
通過 創建 Batch 服務 快速上手,並參考其他 Spring Batch 資源。
5. Core Spring Packages
Here, let’s take a look at core Spring packages.
-
org.springframework.cache – This package supports sub packages and classes for declarative cache management, setting up the open source cache in Caffeine library, support classes for the open source cache EhCache 2.x.
-
org.springframework.context – This package builds on the beans package to add support for message sources and for the Observer design pattern, and the ability for application objects to obtain resources using a consistent API.
-
org.springframework.core – Provides basic classes for exception handling and version detection and other core helpers that are not specific to any part of the framework.
-
org.springframework.expression – This package provides core abstractions behind the Spring Expression Language.
-
org.springframework.http – This package contains a basic abstraction over client/server-side HTTP.
- org.springframework.jdbc – The classes in this package make JDBC easier to use and reduce the likelihood of common errors.
-
org.springframework.jms – This package contains integration classes for JMS, allowing for Spring-style JMS access.
-
org.springframework.jndi – The classes in this package make JNDI easier to use, facilitating the accessing of configuration stored in JNDI, and provide useful superclasses for JNDI access classes.
-
org.springframework.orm.hibernate5 – Package providing integration of Hibernate 5.x with Spring concepts.
-
org.springframework.test.util – General utility classes for use in unit and integration tests.
This list is limited and just describes core packages for Spring framework. You can find the complete listing here.
6. 結論
在本文快速概述中,我們探討了 Spring 生態系統中存在的各種項目,並收集了大量的 Maven 依賴項、GitHub 項目以及每個項目提供的豐富功能,從而使我們的 Web 應用程序安全、可擴展且易於維護。
我們還探討了核心包,這些包賦予我們專注於應用程序邏輯的能力。