Spring 框架總覽

Spring 簡介

Spring 是一個開源應用框架,旨在降低應用程序開發的複雜度。

  • 它是輕量級、鬆散耦合的。
  • 它具有分層體系結構,允許用戶選擇組件,同時還爲 J2EE 應用程序開發提供了一個有凝聚力的框架。
  • 它可以集成其他框架,如 Spring MVC、Hibernate、MyBatis 等,所以又稱爲框架的框架( 粘合劑、腳手架 )。

Spring 模塊

在這裏插入圖片描述

Spring 核心容器

對應圖中的 Core Container,該層基本上是 Spring Framework 的核心,包含以下模塊:

  • Spring Core

  • Spring Bean

    核心容器提供 Spring 框架的基本功能。核心容器的主要組件是 BeanFactory,它是工廠模式的實現。BeanFactory 使用控制反轉 (IoC)模式將應用程序的配置和依賴性規範與實際的應用程序代碼分開。

  • Spring Context

    Spring 上下文是一個配置文件,向 Spring 框架提供上下文信息。Spring 上下文包括企業服務,例如 JNDI、EJB、電子郵件、國際化、事件機制、校驗和調度功能。

  • SpEL (Spring Expression Language)

    Spring 表達式語言全稱爲 “Spring Expression Language”,縮寫爲 “SpEL” ,類似於 Struts2 中使用的 OGNL 表達式語言,能在運行時構建複雜表達式、存取對象圖屬性、對象方法調用等等,並且能與 Spring 功能完美整合,如能用來配置 Bean 定義。

也可以說,Core Container 就是 Spring IoC。

數據訪問 / 整合

對應圖中 Data Access,該層提供與數據庫交互的支持,包含以下模塊:

  • JDBC (Java Database Connectivity)

    Spring 對 JDBC 的封裝模塊,提供了對關係數據庫的訪問。

  • ORM (Object Relational Mapping)

    Spring ORM 模塊,提供了對 hibernate5 和 JPA 的集成。

    • hibernate5 是一個 ORM 框架。
    • JPA 是一個 Java 持久化 API 。
  • OXM (Object XML Mappers)

    Spring 提供了一套類似 ORM 的映射機制,用來將 Java 對象和 XML 文件進行映射。這就是 Spring 的對象 XML 映射功能,有時候也成爲 XML 的序列化和反序列化。

  • Transaction

    Spring 簡單而強大的事務管理功能,包括聲明式事務(@Transactional)和編程式事務(TransactionTemplate)。

Web

該層提供了創建 Web 應用程序的支持,包含以下模塊:

  • Web MVC

    MVC 框架是一個全功能的構建 Web 應用程序的 MVC 實現。通過策略接口,MVC 框架變成爲高度可配置的,MVC 容納了大量視圖技術,其中包括 JSP、Velocity、Tiles、iText 和 POI。

  • Web Flux

    基於 Reactive 庫的響應式的 Web 開發框架。

  • Web Socket

    Spring 4.0 的一個最大更新是增加了對 Websocket 的支持。

    Websocket 提供了一個在 Web 應用中實現高效、雙向通訊,需考慮客戶端(瀏覽器)和服務端之間高頻和低延時消息交換的機制。

    一般的應用場景有:在線交易、網頁聊天、遊戲、協作、數據可視化等。

  • Portlet 已經廢棄

AOP

該層支持面向切面編程,包含以下模塊:

  • AOP

    通過配置管理特性,Spring AOP 模塊直接將面向方面的編程功能集成到了 Spring 框架中。所以,可以很容易地使 Spring 框架管理的任何對象支持 AOP。

    Spring AOP 模塊爲基於 Spring 的應用程序中的對象提供了事務管理服務。通過使用 Spring AOP,不用依賴 EJB 組件,就可以將聲明性事務管理集成到應用程序中。

  • Aspects

    該模塊爲與 AspectJ 的集成提供支持。

  • Instrumentation

    該層爲類檢測和類加載器實現提供支持。

其他

  • JMS (Java Messaging Service)

    提供了一個 JMS 集成框架,簡化了 JMS API 的使用。

  • Test

    該模塊爲使用 JUnit 和 TestNG 進行測試提供支持。

  • Messaging

    該模塊爲 STOMP 提供支持。它還支持註解編程模型,該模型用於從 WebSocket 客戶端路由和處理 STOMP 消息。

Spring 的優缺點

優點

  • DIDependency Injection(DI) 方法,使得構造器和 JavaBean、properties 文件中的依賴關係一目瞭然。
  • 輕量級:與 EJB 容器相比較,IoC 容器更加趨向於輕量級。這樣一來 IoC 容器在有限的內存和 CPU 資源的情況下,進行應用程序的開發和發佈就變得十分有利。
  • 面向切面編程(AOP): Spring 支持面向切面編程,同時把應用的業務邏輯與系統的服務分離開來。
  • 集成主流框架:Spring 並沒有閉門造車,Spring 集成了已有的技術棧,比如 ORM 框架、Logging 日期框架、J2EE、Quartz 和 JDK Timer ,以及其他視圖技術。
  • 模塊化:Spring 框架是按照模塊的形式來組織的。由包和類的命名,就可以看出其所屬的模塊,開發者僅僅需要選用他們需要的模塊即可。
  • 便捷的測試:要 測試一項用Spring開發的應用程序 十分簡單,因爲測試相關的環境代碼都已經囊括在框架中了。更加簡單的是,利用 JavaBean 形式的 POJO 類,可以很方便的利用依賴注入來寫入測試數據。
  • Web 框架:Spring 的 Web 框架亦是一個精心設計的 Web MVC 框架,爲開發者們在 Web 框架的選擇上提供了一個除了主流框架比如 Struts 、過度設計的、不流行 Web 框架的以外的有力選項。
  • 事務管理:Spring 提供了一個便捷的事務管理接口,適用於小型的本地事物處理(比如在單 DB 的環境下)和複雜的共同事物處理(比如利用 JTA 的複雜 DB 環境)。
  • 異常處理:Spring 提供一個方便的 API ,將特定技術的異常(由JDBC, Hibernate, 或 JDO 拋出)轉化爲一致的、Unchecked 異常。

缺點

  • 每個框架都有的問題,調試階段不直觀,後期的 bug 對應階段,不容易判斷問題所在。要花一定的時間去理解它。
  • 把很多 JavaEE 的東西封裝了,在滿足快速開發高質量程序的同時,隱藏了實現細節。

Spring 中的設計模式

Spring 框架中使用到了大量的設計模式,下面列舉了比較有代表性的:

  • 代理模式 — 在 AOP 和 remoting 中被用的比較多。
  • 單例模式 — 在 Spring 配置文件中定義的 Bean 默認爲單例模式。
  • 模板方法 — 用來解決代碼重複的問題。比如 RestTemplateJmsTemplateJdbcTemplate
  • 前端控制器 — Spring提供了 DispatcherServlet 來對請求進行分發。
  • 視圖幫助(View Helper) — Spring 提供了一系列的 JSP 標籤,高效宏來輔助將分散的代碼整合在視圖裏。
  • 依賴注入 — 貫穿於 BeanFactory / ApplicationContext 接口的核心理念。
  • 工廠模式 — BeanFactory 用來創建對象的實例。
發佈了85 篇原創文章 · 獲贊 335 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章