Spring框架設計模式分析
在Java web的開發過程中,目前企業級應用程式採用較多的開發框架是SSH(Spring+SpringMVC+Hibernate,用SpringMVC來代替Struts)。本文通過閱讀Spring的官方手冊和原始碼來分析Spring建立者的設計理念,主要梳理在使用Spring的過程中遇到的設計模式,以及Spring框架中各個核心元件之間的協同方式。
1.Spring框架簡介
Spring框架是目前最流行的企業級開發框架之一,由Rod Johnson建立。Spring作為現在主流的企業級應用開發框架,建立的主要目的是為了解決企業應用開發的複雜性,對一些常用的企業級API提供一致的模型封裝。Spring使用基本的JavaBean來完成以前只可能由EJB完成的事情,通過輕量級的容器來取代傳統的EJB,簡化企業應用的開發難度。
Spring框架是一個分層架構,由7個定義良好的模組組成。Spring模組構建在核心容器之上,核心容器定義了建立、配置和管理bean的方式,Spring框架的架構模式如圖1所示。
圖1 spring framework構架模式
2.Spring框架中設計模式的應用
Spring框架由多個模組組成,每個模組都有其特定的功能。各模組可以單獨存在,也可以和其他一個或多個模組組合實現。為了實現各個模組的功能,建立者在設計Spring的時候採用了多種設計模式,下面文章中主要分析Spring框架中相對比較重要的幾個模組所採用的實際模式。
2.1工廠模式(Factory pattern)
(1)定義
工廠模式是GOF23中設計模式之一,屬於建立模式的一種。工廠模式可將Java物件的呼叫者從被呼叫者的實現邏輯中分離出來,呼叫者只需關心被呼叫者必須滿足的規則(介面),而不必關心例項的具體實現過程。工廠模式由抽象產品(介面)、具體產品(實現類)、生產者(工廠類)三種角色組成。
(2)Spring中對工廠模式的應用
Spring中在各種BeanFactory以及ApplicationContext建立中都用到了典型的工廠方法模式,BeanFactory的設計原理如圖2所示。
Spring Bean的體系結構比較複雜,頂級介面是BeanFactory;BeanFactory共有三個子介面:ListableBeanFactory、HierarchicalBeanFactory和AutowireCapableBeanFactory,這三個子介面集成了頂級介面並對BeanFactory的功能進行了增強,稱為二級介面;ConfigurableBeanFactory對二級介面HierarchicalBeanFactory進行了再次增強,它還繼承了另一個外來的介面SingletonBeanRegistry,可以被稱為三級介面;ConfigurableListableBeanFactory是一個更強大的介面,繼承了上述的所有介面,稱為四級介面。其餘的為抽象類,實現了Spring Bean四級介面所定義的所有功能。
圖2 BeanFactory的設計原理
2.2代理模式(Proxy pattern)
(1)定義
代理模式為其他物件提供一種代理以控制對這個物件的訪問。在某些情況下,一個物件不適合或者不能直接引用另一個物件,而代理物件可以在客戶端和目標物件之間起到中介的作用。代理模式由抽象角色、代理角色和真實角色三種角色組成。
(2)Spring中代理模式的應用
Spring的Proxy模式主要在Aop的實現中有體現,比如JdkDynamicAopProxy和Cglib2AopProxy,用到了JDK的動態代理模式。Spring中使用代理模式的結構如圖3所示。
圖3 Spring使用代理模式的結構
$Proxy是建立的代理物件,Subject是抽象主題,代理物件是通過InvocationHandler來持有對目標物件的引用。除了實現被代理物件的介面外,還會有org.springframework.aop.SpringProxy和org.springframework.aop.framework.Advised兩個介面。
2.3策略模式(Strategy pattern)
(1)定義
策略模式定義一系列的演算法,把它們一個個封裝起來,並且使它們可相互替換,使得演算法可獨立於使用它的客戶而變化。策略模式由抽象策略角色、具體策略角色和環境角色三種角色組成。
(2)Spring中策略模式的應用
Spring中在例項化物件的時候用到Strategy模式,結構如圖4所示。Spring中抽象策略實現的核心是AopProxy介面;Cglib2AopProxy和JdkDynamicAopProxy集成了核心介面,分別代表兩種策略的實現方式;ProxyFactoryBean代表Spring中的Context角色,它根據條件選擇使用Jdk代理方式或者是CGLIB方式;而另外三個類主要是來負責建立具體策略物件;ProxyFactoryBean是通過依賴的方法來關聯具體策略物件的,它是通過呼叫策略物件的getProxy(ClassLoader classLoader)方法來完成操作。
圖4 Spring策略模式結構示意圖
2.總結
本文通過從Spring的幾個核心元件入手,試圖找出構建Spring框架的骨骼架構,進而分析Spring在設計過程中的一些設計理念。主要分析了Spring構架和實現中所應用的工廠模式、代理模式和策略模式,從中學習到Spring作者的設計思想,對我們以後程式設計能提供一些思路。
相關推薦
Spring框架設計模式分析
在Java web的開發過程中,目前企業級應用程式採用較多的開發框架是SSH(Spring+SpringMVC+Hibernate,用SpringMVC來代替Struts)。本文通過閱讀Spring的官方手冊和原始碼來分析Spring建立者的設計理念,主要梳理在
Spring 框架的設計理念與設計模式分析
問題 面向對象編程 -h oop ram 重要 原因 依賴 object 轉自: https://www.ibm.com/developerworks/cn/java/j-lo-spring-principle/ Spring 的設計理念 前面介紹了 Spring 的三
Spring 框架的設計理念與設計模式分析(2)
下面再看看 Spring 是如何呼叫攔截器的,下面是這個過程的時序圖: 圖 20.Spring 呼叫攔截器 以上所說的都是 Jdk 動態代理,Spring 還支援一種 CGLIB 類代理,感興趣自己看吧。 Spring 中使用的設計模式也很多,比如工廠模式、單例模
Spring框架的設計理念與設計模式分析(一)
Spring 的骨骼架構 Spring 總共有十幾個元件,但是真正核心的元件只有幾個,下面是 Spring 框架的總體架構圖: 圖 1 .Spring 框架的總體架構圖 從上圖中可以看出 Spring 框架中的核心元件只有三個:Core、Context 和 B
Spring框架設計理念與設計模式
Spring作為現在最優秀的框架之一,已被廣泛的使用,51CTO也曾經針對Spring框架中的JDBC應用做過報道。本文將從另外一個視角試圖剖析出Spring框架的作者設計Spring框架的骨骼架構的設計理念,有那幾個核心元件?為什麼需要這些元件?它們又是如何結合在一起構成Spring的骨骼架構?
Tomcat的設計模式分析
責任鏈模式 Tomcat 中一個最容易發現的設計模式就是責任鏈模式,這個設計模式也是 Tomcat 中 Container 設計的基礎,整個容器的就是通過一個鏈連線在一起,這個鏈一直將請求正確的傳遞給最終處理請求的那個 Servlet。 責任鏈模式的原理
工廠設計模式分析
簡單工廠: 為了符合開閉原則和單一職責原則:把物件的建立過程獨立出來。放進工廠類實現而呼叫者不需要知道具體的構造過程。 在工廠類中一開始分別設定不同的生產方法提供給使用者呼叫,這樣呼叫者需要了解工廠的好幾種方法,不符合 迪米特原則:所以改成一個方法,呼叫者分
Android原始碼設計模式分析一期釋出
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
Spring 5 設計模式 - 使用代理和裝飾模式的Spring AOP
Spring 5 設計模式 - 使用代理和裝飾模式的Spring AOP Spring中的代理模式 什麼是AOP AOP要解決的問題 程式碼糾纏 程式碼分散 解決 AOP的核心術語
Spring 5 設計模式 - bean生命週期和使用的模式
Spring 5 設計模式 - bean生命週期和使用的模式 生命週期和階段 初始化階段 載入bean定義 初始化bean例項 使用BeanPostProcessor自定義bean 初始化擴充套件點
Spring 5 設計模式 - Dependency Injection
Spring 5 設計模式 - Dependency Injection 依賴注入模式 依賴注入模式的型別 基於構造器的 基於Setter方法的 二者的比較 使用Spring配置依賴注入模式 Java-based
Spring 5 設計模式 - Structural
Spring 5 設計模式 - Structural adapter Spring使用的介面卡模式 簡單的實現 Bridge Spring中的應用 簡單的實現 Composite
Spring 5 設計模式 - Creational
Spring 5 設計模式 - Creational Factory Spring的工廠模式 簡單的例子 Abstract factory Spring中的Abstract factory 簡單的例子
Spring 5 設計模式 - 開始
Spring 5 設計模式 - 開始 依賴注入 AOP template Spring容器 bean的生命週期 依賴注入 物件之間的依賴增加複雜性,導致物件之間緊耦合。 比如下面的TransferServi
spring的設計模式模式
spring中的設計模式 Spring框架是由於軟體開發的複雜性而建立的。Spring使用的是基本的JavaBean來完成以前只可能由EJB完成的事情。然而,Spring的用途不僅僅限於伺服器端的開發。從簡單性、可測試性和鬆耦合性角度而言,絕大部分Java應用都
新書出版《.NET框架設計—模式、配置、工具》感恩回饋社群!
很高興我的第一本書由圖靈出版社出版。本書總結了我這些年來對框架學習、研究的總結,裡面純乾貨,無半句廢話。 書的詳情請看互動網的銷售頁面:http://product.china-pub.com/3770890 精彩推薦: “這本書最大的價值就在於告訴你如何在實戰中運用平時學到的知識,如何站在不同
Hibernate框架設計模式:工廠模式
工廠模式:是一種類建立模型,適用於在建立多個複雜物件的時候(在不同情況下建立不同物件)。 工廠模式一般分為以下兩種: 1.簡單工廠模式:在工廠類定義建立不同物件例項的方法,在需要使用物件的地方,通過建立工廠並給出需要的物件名稱來獲取物件例項。 例如:車是一個大類,具體的車
分享我在阿里工作十年接觸過Java框架設計模式
一、前言 說起來設計模式,大家應該都耳熟能詳,設計模式代表了軟體設計的最佳實踐,是經過不斷總結提煉出來的程式碼設計經驗的分類總結,這些模式或者可以簡化程式碼,或者可以是程式碼邏輯開起來清晰,或者對功能擴充套件很方便…。 設計模式按照使用場景可以分為三大類:建立型模式(
MFC 中的設計模式分析
最近在學習設計模式,突然想到MFC裡面其實也包含有設計模式的原理,於是分析了一下,做一個筆記,網上也找了一些資料,在此一併感謝。 建立型模式 單例模式(Singleton Pattern)單例模式確保某一個類只有一個例項,而且自行例項化並向整個系統提供這個例項。這個類
23種設計模式分析(1):建立型模式
設計模式(Design pattern)是一套被反覆使用、多數人知曉的、經過分類編目的、程式碼設計經驗的總結。使用設計模式是為了可重用程式碼、讓程式碼更容易被他人理解、保證程式碼可靠性。 毫無疑問,設計模式於己於他人於系統都是多贏的,設計模式使程式碼編制真正工程化,