Spring詳解1.概述


博客地址:https://spiderlucas.github.io
備用地址:http://spiderlucas.coding.me

1 Spring是什麼

Spring是由Rod Johnson締造的一個分層的Java SE/EE應用一站式的輕量級開源框架,以IoC(Inverse of Control,反轉控制)和AOP(Aspect Oriented Programming,面向切面編程)爲內核,提供了展現層Spring MVC、持久層Spring JDBC及業務層事務管理等一站式的企業級應用技術。

2 Spring的優點

  • 方便解耦——Spring提供的IoC容器實現了對象依賴關係的管理,避免了硬編碼導致的耦合。
  • 支持AOP——Spring提供的AOP功能,方便進行面向切面編程。
  • 聲明式事物——Spring提供了通過聲明的方式靈活的進行事務管理。
  • 方便程序測試——可以用非容器以來的編程方式進行幾乎所有的測試工作。
  • 集成了多種優秀框架——Spring提供了對各種優秀框架(如Struts、Hibernate、Hessian、Quartz等)的直接支持。
  • 降低Java EE API的使用難度——Spring對很多難用的Java EE API(如JDBC、JavaMail、遠程調用等)提供了一個薄薄的封裝層,使得這些Java EE API的使用難度大爲降低。
  • Java源碼是經典學習範例——Spring的源碼設計精妙、結構清晰,是Java技術的最佳實踐的範例。

3 Spring體系結構

Spring框架按照所屬功能可以劃分爲5個主要模塊,如下所示:
Spring框架結構

IOC

Spring的核心模塊實現了IoC的功能,它將類和類之間的依賴從代碼中脫離出來,用配置的方式進行依賴關係描述,由IoC容器負責類的創建,管理,獲取等工作。

  • BeanFactory接口是Spring框架的核心接口,實現了容器很多核心的功能。
  • Context模塊構建於核心模塊之上,擴展了BeanFactory的功能,包括國際化、Bean生命週期控制、框架事件體系、資源加載透明化等功能;還提供了衆多企業級服務的支持,如郵件服務、任務調度、JNDI、EJB、遠程訪問等。ApplicationContext是Context模塊的核心接口。
  • 表達式語言(Expression Language)是統一表達式語言的一個擴展,用於查詢和管理運行期的對象,支持設置和獲取對象屬性,調用對象方法,操作數組、集合等。使用它可以很方便的通過表達式和Spring IoC容器進行交互。
AOP

Spring提供了滿足AOP Alliance規範的實現,還整合了AspectJ這種語言級的框架。Java 5.0引入了java.lang.instrument,允許在JVM啓動時啓用一個代理類,通過該代理類在運行期修改類的字節碼,改變一個類的功能,從而實現AOP的功能。

數據訪問和集成
  • Spring站在DAO的抽象層面,建立了一套面向DAO層的統一的異常體系,同時將各種訪問數據的檢查異常轉換成非檢查型異常,爲整合各種持久層框架提供基礎。
  • Spring通過模版化技術對各種高數據訪問技術進行了薄層封裝,將模式化的代碼隱藏起來,使數據訪問的程序得到大幅簡化。
  • 藉助AOP技術,Spring提供了聲明式事務的功能。
Web及遠程操作
  • 該模塊建立在Application Context模塊之上,提供了Web應用的各種工具類和多項面向Web的功能。
  • Spring提供了一個完整的MVC框架——Spring MVC,還整合Structs、WebWork等MVC框架。
  • WebSocket提供了一個在Web應用中高效、雙向的通信,實現了客戶端和服務器之間的高頻和低延時消息交換。
測試框架

Spring可以用非容器依賴的編程方式進行幾乎所有的測試工作,支持JUnit和TestNG等測試框架。

4 Spring4.0的新特性

  1. 完全支持Java 8
  2. 核心容器的增強:支持範型依賴注入;對CgLib類代理不要求必須有空參構造器;提供了@Description、@Conditional、@Lazy、@Order等新的註解
  3. 支持用Groovy定義Bean
  4. Web的增強:開始基於Servlet 3.0;爲了方便REST開發,引入了@RestController控制器註解;添加了一個AsyncRestTemplate支持Rest客戶端的異步無阻塞請求。
  5. 支持WebSocket
  6. 測試的增強:Spring-test模塊裏的所有註解都可以用作meta-annotation,這樣就可以自定義組合註解來減少測試時的重複配置;提供了@Sql註解支持多數據源的測試。
  7. 提供了對JCache註解的支持,並對Cache抽象部分進行了增強。
  8. 添加了動態語言支持,對動態腳本語言計算表達式進行了抽象封裝。
  9. 添加了多線程併發處理支持
  10. 增強了持久化處理

5 Spring的子項目

  1. Spring IO Platform : Spring IO是可集成的、構建現代化應用的版本平臺。Spring IO是模塊化的、企業級的分佈式系統,包括一系列依賴,是的開發者僅能對自己所需的部分進行完全的部署控制。
  2. Spring Boot:Spring應用快速開發工具,用來簡化Spring應用開發過程。
  3. Spring XD:Spring XD(eXtreme Date,極限數據)是Pivotal的大數據產品。它結合了Spring Boot和Grails,組成Spring IO平臺的執行部分。
  4. Spring Data:Spring Data是爲了簡化構建基於Spring框架應用的數據訪問實現,包括非關係數據庫、Map-Reduce框架、雲數據服務等;另外,也包含對關係數據庫的訪問支持。
  5. Spring Integration:Spring Integration爲企業數據集成提供了各種適配器,可以通過這些適配器來轉換各種消息格式,並幫助Spring應用完成與企業應用系統的集成。
  6. Spring Batch:Spring Batch是一個輕量級的完整批處理框架,皆在幫助應用開發者構建一個健壯、高效的企業級批處理應用(這些應用的特點是不需要與用戶交互,重複的操作量大,對於大容量的批量數據處理而言,這些操作往往要求較高的可靠性)
  7. Spring Security:Spring Security是一個能夠爲基於Spring的企業應用系統提供聲明式的安全訪問控制解決方案的安全框架。它提供了一組可以在Spring應用上下文配置的bean,充分利用Ioc和AOP功能,爲應用系統提供聲明式的安全訪問控制功能。
  8. Spring Hateoas:Spring Hateoas是一個用戶支持實現超文本驅動的REST Web服務的開發庫,是Hateoas的實現。Hateoas(Hypermedia as the engine of application state)是REST架構風格中最複雜的約束,也是構建成熟REST服務的核心。它的重要性在於打破了客戶端和服務器之間嚴格的契約,是的客戶端可以更加智能和自適應。
  9. Spring Social:Spring Social是Spring框架的擴展,用來方便開發Web社交應用程序,可通過該項目來創建與各種社交網站的交互,如Facebook,LinkedIn、Twitter等。
  10. Spring AMQP:Spring AMQP是基於Spring框架的AMQP消息解決方案,提供模版化的發送和接收消息的抽象層,提供基於消息驅動的POJO。這個項目支持Java和.NET連個版本。Spring Source旗下的Rabbit MQ就是一個開源的基於AMQP的消息服務器。
  11. Spring for Android:Spring for Android爲Android終端開發應用提供Spring的支持,它提供了一個在Android應用環境中工作、基於Java的REST客戶端。
  12. Spring Mobile:Spring Mobile是基於Spring MVC構建的,爲移動端的服務器應用開發提供支持。
  13. Spring Web Flow:Spring Web Flow(SWF)一個建立在Spring MVC基礎上的Web頁面流引擎。
  14. Spring Web Service:Spring Web Service是基於Spring框架的Web服務框架,主要側重於基於文檔驅動的Web服務,提供SOAP服務開發,允許通過多種方式創建Web服務。
  15. Spring LDAP:Spring LDAP是一個用戶操作LDAP的Java框架,類似Spring JDBC提供了JdbcTemplate方式來操作數據庫。這個框架提供了一個LdapTemplate操作模版,可幫助開發人員簡化looking up、closing contexts、encoding/decoding、filters等操作。
  16. Spring Session: Spring Session致力於提供一個公共基礎設施會話,支持從任意環境中訪問一個會話,在Web環境下支持獨立於容器的集羣會話,支持可插拔策略來確定Session ID,WebSocket活躍的時候可以簡單地保持HttpSession。
  17. Spring Shell: Spring Shell提供交互式的Shell,用戶可以簡單的基於Spring的編程模型來開發命令。

6 Spring相關資料

Spring 官方文檔
Spring 參考文檔
Spring 項目地址
Spring Boot 項目地址
Spring Boot 參考文檔
Spring Cloud 參考文檔
Spring maven倉庫

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章