Spring總體架構:前端

Core Container數據庫
Core Container(核心容器)包含Beans、Core、Context、EspL四個模塊編程
Core和Beans是Spring的基礎部分,提供IOC(控制反轉)和DI(依賴注入)後端
該模塊主要包含Spring基本的核心工具類,Spring的其餘組件都要使用其中的類,Core模塊是其餘組件的基本核心。設計模式
Beans是全部應用都要用到的,它包含訪問配置文件,建立和管理bean以及進行(IOC/DI)操做相關的類。架構
Context模塊提供對外接口,該模塊爲Spring的核心提供了大量擴展。ApplicationContext接口是Context模塊的關鍵。app
該提供了一個強大的表達式語言用於在運行時查詢和操做對象。框架
Data Access函數
Data Access/Integration包含有JDBC,ORM,OXM,JMS和Transaction五個模塊。工具
該模塊提供了一個JDBC抽象層,它能夠消除冗長的JDBC編碼和解析數據庫廠商特有的錯誤代碼。這個模塊包含了Spring對JDBC數據訪問進行封裝的類。
該模塊就是對象-關係映射API。
該模塊提供了一個對Object/XML映射實現的抽象層,Object/XML映射實現包括JAXB,Castor,XMLBeans,JiBX和XStream。
- JMS(Java Messaging Service)模塊
主要包含了一些製造和消費信息的特性。
該模塊主持編程和聲明性的事務管理,這些事務必須實現特定的接口,而且對全部的POJO(簡單Java對象,即沒有繼承任何類,沒有實現任何接口,沒有被框架入侵的Java對象)都使用。
Web
Web上下文模塊創建在應用程序上下文模塊之上,爲基於Web的應用程序提供了上下文。
AOP
AOP模塊提供了一個符合AOP聯盟標準的面向切面的實現。它讓咱們能夠定義例如***和切點,從而將邏輯代碼分開,下降它們之間的耦合度。
Test
Test模塊支持使用JUnit和TestNG對Spring組件進行測試
Spring的三種注入方式
Spring的事務管理
聲明式事務管理(使用) 將業務代碼和事務管理分離,只需用註解和XML配置來管理事務,經過AOP實現
在同一個類裏,一個沒有加註解的調用加註解的,被調用方法的事務也是不會生效的.
Spring事務傳播行爲
- PROPAGATION_REQUIRED(默認) 若是當前沒有事務,就新建一個事務,若是已經存在一個事務中,加入到這個事務中
- PROPAGATION_SUPPORTS 支持當前事務,若是當前沒有事務,就以非事務方式執行
- PROPAGATION_MANDATORY 使用當前的事務,若是當前沒有事務,就拋出異常
- PROPAGATION_REQUIRES_NEW 新建事務,若是當前存在事務,把當前事務掛起
- PROPAGATION_NOT_SUPPORTED 以非事務方式執行操做,若是當前存在事務,就把當前事務掛起
- PROPAGATION_NEVER 以非事務方式執行,若是當前存在事務,則拋出異常
- PROPAGATION_NESTED 若是當前存在事務,則在嵌套事務內執行。若是當前沒有事務,則執行PROPAGATION_REQUIRED 相似的操做
SpringMVC流程

- 用戶發送請求至 前端控制器DispatcherServlet。
- 前端控制器DispatcherServlet收到請求後調用處理器映射器HandlerMapping。
- 處理器映射器HandlerMapping。
- 根據請求的Url找到具體的處理器,生成處理器對象Handler及處理器***HandlerIntercepter(若是有則生成)一併返回給前端控制器DispatcherServlet。
- 前端控制器DispatcherServlet經過處理器適配器HandlerAdapter調用處理器Controller。
- 執行處理器(Controller,也叫後端控制器)處理器Controller執行完後返回ModelAndView。
- 處理器映射器HandlerAdapter將處理器Controller執行返回的結果ModelAndView返回給前端控制器DispatcherServlet。
- 前端控制器DispatcherServlet將ModelAnView傳給視圖解析器ViewResolver。
- 視圖解析器ViewResolver解析後返回具體的視圖View。
- 前端控制器DispatcherServlet對視圖View進行渲染視圖(即:將模型數據填充至視圖中)
- 前端控制器DispatcherServlet響應用戶。
Spring涉及的設計模式
- 簡單工廠模式
Spring中的BeanFactory就是簡單工廠模式的體現,根據傳入一個惟一的標識來得到Bean對象
- 工廠方法模式
Spring中的FactoryBean就是典型的工廠方法模式
- 單例模式
保證一個類僅有一個實例,並提供一個訪問它的全局訪問點。
Spring中的單例模式完成了後半句話,即提供了全局的訪問點BeanFactory。但沒有從構造器級別去控制單例
- 適配器模式
Spring在***上採用了適配器模式。
- 裝飾器模式
Spring中用到的包裝器模式在類名上有兩種表現:一種是類名中含有Wrapper,另外一種是類名中含有Decorator。基本上都是動態地給一個對象添加一些額外的職責。
- 代理模式
Spring的Proxy模式在aop中有體現
- 觀察者模式
Spring中Observer模式經常使用的地方是listener的實現。如ApplicationListener。
- 策略模式
Spring中在實例化對象的時候用到Strategy模式。
- 模板方法模式 JdbcTemplate使用了模板方法模式。