1. 程式人生 > >Spring技術內幕(一)------理念與架構

Spring技術內幕(一)------理念與架構

1.Spring的各個子專案認識

基於Spring4.x版本的常見模組介紹

1.1 Spring Framework(core)

Spring Framework包含了一系列IOC容器的設計,提供了依賴反轉模式的實現;同時還集成了AOP功能.除外還包括Spring的基本模組如MVC,JDBC,事務處理模組的實現.

1.2 Spring Boot

Spring Boot簡化了基於Spring的應用開發,你只需要"run"就能建立一個獨立的,產品級別的Spring應用.為Spring平臺及第三方庫提供開箱即用的設定,這樣開發者就可以有條不紊地開始。且多數Spring Boot應用只需要很少的Spring配置。

1.3 Spring Data

當基礎資料並非儲存在關係型資料庫中時,Spring Data為Spring提供了使用非關係型資料庫的能力.Spring Data中包含一些子模組,其中常見的一些如下:

  • Spring Data JDBC
  • Spring Data JDBC Extensions
  • Spring Data JPA
  • Spring Data MongoDB
  • Spring Data Redis
  • Spring Data REST
  • Spring Data Elasticsearch
  • Spring for Apache Hadoop

1.4 Spring Cloud

微服務的主旨是將一個原本獨立的系統拆分成多個小型服務,這些小型服務都在各自獨立的程序中執行,服務之間通過基於HTTP的RESTful API進行通訊協作,並且每個服務都維護著自身的資料儲存、業務開發、自動化測試以及獨立部署機制。 微服務的特徵:

  1. 每個微服務可獨立執行在自己的程序裡
  2. 一系列獨立執行的微服務共同構建起了整個系統
  3. 每個服務為獨立的業務開發,一個微服務一般完成某個特定的功能,比如:訂單管理、使用者管理等.
  4. 微服務之間通過一些輕量的通訊機制進行通訊,例如通過REST API或者RPC的方式進行呼叫.

Spring Cloud為分散式系統開發提供工具集,基於Spring Boot,為基於JVM的雲應用開發中的配置管理、服務發現、斷路器、智慧路由、控制匯流排、全域性鎖、決策競選、分散式會話、叢集狀態管理等操作提供了一種簡單的開發方式,其下有很多子專案:

  • 分散式/版本化配置:Spring Cloud Config
  • 服務註冊和發現:Netflix Eureka 或者 Spring Cloud Eureka(對前者的二次封裝)
  • 路由:Spring Cloud Zuul,基於 Netflix Zuul
  • service - to - service呼叫:Spring Cloud Feign
  • 負載均衡:Spring Cloud Ribbon 基於 Netflix Ribbon 實現
  • 斷路器:Spring Cloud Hystrix
  • 分散式訊息傳遞:Spring Cloud Bus

1.5 Spring Cloud Data Flow

Spring Cloud Data Flow 是基於原生雲對Spring XD的重新設計,專案目標是簡化大資料應用的開發。

1.6 Spring Security

為Spring開發者提供一個安全服務,比如使用者認證.授權等.

1.7 Spring Session

Spring Session提供了一套建立和管理Servlet HttpSession的方案。
Spring Session提供了叢集Session功能,預設採用外接的Redis來儲存Session資料,以此來解決Session共享的問題。

1.8 Spring Integretion

為企業的資料整合提供瞭解決方案.

1.9 Spring HATEOAS

為了簡化簽入或獲取超連結等操作,Spring HATEOAS提供了相關的支援。

1.10 Spring REST Docs

可以生成準確可讀的RESTful Service文件,Spring 官方文件都是用Spring REST Docs生成的。

1.11 Spring Batch

提供構建批處理應用和自動化操作的框架,這些應用具有不需要與使用者互動,重複的操作量大等特點.

1.12 Spring IO Platform

可以認為是一個依賴維護平臺,該平臺將相關依賴匯聚到一起,針對每個依賴,都提供了一個版本號。Spring IO Platform能很好地解決這些問題,我們在新增第三方依賴的時候,不需要寫版本號,它能夠自動幫我們挑選一個最優的版本。

1.13 Spring AMQP

為Spring應用更好的使用基於AMQP(高階訊息應用佇列)的訊息服務而開發的.

1.14 Spring for Android

為安卓的終端開發提供支援.

1.15 Spring LDAP

Spring LDAP是一個用於操作LDAP的Java框架。它是基於Spring的JdbcTemplate模式,能夠幫助開發人員簡化操作。

1.16 Spring Mobile

與Spring Android不同,通過Spring Mobile能使工作在傳統的伺服器上完成.

1.17 Spring Shell

Spring Shell提供互動式的Shell,可以讓你使用簡單的基於Spring的程式設計模型來開發命令。

1.18 Spring Statemachine

它的主要功能是幫助開發者簡化狀態機的開發過程,讓狀態機結構更加層次化。

1.19 Spring Web Flow

Spring Web Flow是Spring MVC 的擴充套件,它支援開發基於流程的應用程式。它將流程的定義與實現流程行為的類和檢視分離開來,具有同時處理多個HTTP請求、管理會話狀態、資料事務處理,支援AJAX來構建豐富的客戶端體驗,並且提供對JSF的支援。

1.20 Spring Web Services

2.Spring的設計目標

Spring為開發者提供的是一個一站式的輕量級應用框架.
  使用Spring框架的IOC容器可以對耦合關係實現一個文字化,外部化的工作(通過一個或幾個xml檔案,就可以方便的對應用物件的耦合關係進行瀏覽,修改和維護),簡化應用開發;另外通過IOC容器實現的依賴反轉,把依賴關係的管理從Java物件中解放出來,交給IOC容器來完成,從而完成了物件關係之間的解耦,把物件-物件的關係變為了物件-IOC容器-物件的關係.
  在設計上將Spring分為核心,元件,應用三個層次.Spring的核心部分即為IOC容器及AOP模組.一方面通過IOC容器來管理POJO物件,以及它們相互之間的耦合關係;另一方面通過AOP以動態和非侵入式的方式來增強服務的功能.

3.Spring的整體架構

從總體來看,Spring分為3層,最底層是核心層,包括IOC、AOP等核心模組;中間層是封裝的JavaEE服務、作為中間的驅動元件;最上層是各個應用。架構圖如下:

核心層

  spring4.X的核心層由spring-core、spring-beans、spring-context、spring-context-support和spring-expression模組組成.
  spring-core和spring-beans提供框架的基礎部分,包括IOC功能,BeanFactory是一個複雜的工廠模式的實現,將配置和特定的依賴從實際程式邏輯中解耦。
  context模組建立在core和beans模組的基礎上,增加了對國際化的支援、事件廣播、資源載入和建立上下文,其中ApplicationContext是context模組的重點.
  spring-context-support提供對常見第三個庫的支援,整合到spring上下文中,比如快取(ehcache,guava)、通訊(javamail)、排程(commonj,quartz)、模板引擎等(freemarker,velocity)。
  spring-expression模組提供了一個強大的表示式語言用來在執行時查詢和操作物件圖,這種語言支援對屬性值、屬性引數、方法呼叫、陣列內容儲存、集合和索引、邏輯和算數操作及命名變數,並且通過名稱從spring的控制反轉容器中取回物件。

中間層

AOP和伺服器工具
  spring-aop模組提供面向切面程式設計實現,單獨的spring-aspects模組提供了aspectj的整合和適用。
  spring-instrument提供一些類級的工具支援和ClassLoader級的實現,用於伺服器。
  spring-instrument-tomcat針對tomcat的instrument實現。
  訊息元件spring框架4包含了spring-messaging模組,從spring整合專案中抽象出來,比如Messge、MessageChannel、MessageHandler及其他用來提供基於訊息的基礎服務。

最上層(應用)

資料訪問/整合

資料訪問和整合層由JDBC、ORM、OXM、JMS和事務模組組成。
spring-jdbc模組提供了不需要編寫冗長的JDBC程式碼和解析資料庫廠商特有的錯誤程式碼的JDBC抽象出。
spring-tx模組提供可程式設計和宣告式事務管理。
spring-orm模組提供了領先的物件關係對映API整合層,如JPA、Hibernate等。
spring-oxm模組提供抽象層用於支援Object/XML maping的實現,如JAXB、XStream等。
spring-jms模組包含生產和消費訊息的功能,從Spring4.1開始提供整合spring-messaging模組。

Web

Web層包含spring-web、spirng-webmvc、spring-websocket和spring-webmvc-portlet模組組成。
spring-web模組提供了基本的面向web開發的整合功能,例如多檔案上傳、使用servert listeners和web開發應用程式上下文初始化IOC容器。也包含HTTP客戶端以及spring遠端訪問的支援的web相關部分。 spring-webmvc包含spring的model-view-controller和REST web services 實現的Web應用程式。 spring-webmvc-portlet模組提供了MVC模式的portlet實現,protlet與Servlet的最大區別是請求的處理分為action和render階段,在一個請求中,action階段只執行一次,但render階段可能由於使用者的瀏覽器操作而被執行多次。

測試

spring-test模組支援通過組合Junit或TestNG來進行單元測試和整合測試,提供了連續的載入ApplicationContext並且快取這些上下文。

4.Spring優點

  • Spring是一個非侵入式的框架,讓應用程式程式碼對框架的依賴最小化,應用程式碼可以在沒有Spring或其他容器的情況下執行
  • Spring使用POJO開發,從而可以與執行環境(如應用伺服器)隔離開來.
  • Spring推動應用的設計風格向面向物件及面向介面程式設計轉變,提高了程式碼的重用和可測試性.
  • Spring幫助我們可以選擇不同的技術實現,比如從Hiberante切換到其它ORM工具,從Structs切換到SpringMVC.

參考部落格:Spring理念與設計