1. 程式人生 > >SSM框架淺談

SSM框架淺談

抄自:
https://blog.csdn.net/dairuiqing/article/details/67637179
http://www.cnblogs.com/cyhzzu/p/6644981.html
SSM框架簡介
SSM框架,是spring + Spring MVC + MyBatis的縮寫,這個是繼SSH之後,目前比較主流的Java EE企業級框架,適用於搭建各種大型的企業級應用系統。

Spring簡介
Spring是一個開源框架,Spring是於2003年興起的一個輕量級的Java開發框架,由Rod Johnson在其著作Expert One-On-One J2EE Development and Design中闡述的部分理念和原型衍生而來。它是為了解決企業應用開發的複雜性而建立的。Spring使用基本的JavaBean來完成以前只可能由EJB完成的事情。然而,Spring的用途不僅限於伺服器端的開發。從簡單性、可測試性和鬆耦合的角度而言,任何Java應用都可以從Spring中受益。 簡單來說,Spring是一個輕量級的控制反轉(IoC)和麵向切面(AOP)的容器框架。

控制反轉是什麼呢?
打個比方,你晚上想約個妹子去看電影,假設這個妹子是一個類(溫柔、善良、小鳥依人),那麼你需要例項化她,在JAVA中,通常的做法就是new一個類,讓她變成一個實體的物件。然後,你跟她約了時間、地點,說要請客吃飯,然後用盡你渾身解數,妹子終於答應要和你去看電影了。看完電影之後,你還要送妹子回家,確保安全。當然,這一個步驟一般是由JVM的垃圾回收機制來處理,如果你沒有主動及時送妹子回家,當妹子數量很多的時候,有可能會導致記憶體溢位,系統宕機。
而如果你用了Spring,過程將會是這樣的,你告訴Spring框架你晚上7點要和一個溫柔、善良、小鳥依人般的妹子去看電影,那麼你7點準時來到電影院,此時,你會發現,Spring已經幫你把妹子送來了,完全就是你定義的那個型別。你們愉快地看完電影,然後你可以直接回家,Spring又會幫你把妹子接走。你完全不用關心後續的事情。
在以往,我們是主動地去控制一個物件的例項化和銷燬,現在交由Spring來控制,因此就叫做控制反轉,Inversion of Control,是不是很好理解,一點就通?

面向切面又是什麼呢?
首先,需要說明的一點,AOP只是Spring的特性,它就像OOP一樣是一種程式設計思想,並不是某一種技術。
我們再來打個比方,在程式設計的時候,我們為了滿足某個業務邏輯流程,通常需要一系列步驟。請看下面3個具體業務的流程圖:
在這裡插入圖片描述
圖上可以看到,使用者不管是查詢餘額、辦理業務還是手機充值,都需要經過鑑權這個步驟,有沒有想過可以把這個鑑權的程式碼是提取出來,不放到主流程裡去呢,這就是AOP的作用了,有了AOP,你寫程式碼時不要把這個驗證使用者步驟寫進去,即完全不考慮使用者鑑權,你寫完之後,在另一個地方,寫好驗證使用者的程式碼,然後告訴Spring你要把這段程式碼加到哪幾個地方,Spring就會幫你加過去,而不要你自己Copy過去,這裡還是兩個地方,如果你有多個控制流呢,這個寫程式碼的方法可以大大減少你的時間,不過AOP的目的不是這樣,這只是一個“副作用”,真正目的是,你寫程式碼的時候,事先只需考慮主流程,而不用考慮那些不重要的流程,懂C的都知道,良好的風格要求在函式起始處驗證引數,如果在C上可以用AOP,就可以先不管校驗引數的問題,事後使用AOP就可以隔山打牛的給所有函式一次性加入校驗程式碼,而你只需要寫一次校驗程式碼。不知道C的沒關係,舉一個通用的例子,經常在debug的時候要打log吧,你也可以寫好主要程式碼之後,把打log的程式碼寫到另一個單獨的地方,然後命令AOP把你的程式碼加過去,注意AOP不會把程式碼加到原始檔裡,但是它會正確的影響最終的機器程式碼。就像在上帝視角的高緯度空間,把你需要的步驟像切面般的插入到特定的時空裡面。

追加
IoC(Inversion of Control)

(1). IoC(Inversion of Control)是指容器控制程式物件之間的關係,而不是傳統實現中,由程式程式碼直接操控。控制權由應用程式碼中轉到了外部容器,控制權的轉移是所謂反轉。 對於Spring而言,就是由Spring來控制物件的生命週期和物件之間的關係;IoC還有另外一個名字——“依賴注入(Dependency Injection)”。從名字上理解,所謂依賴注入,即元件之間的依賴關係由容器在執行期決定,即由容器動態地將某種依賴關係注入到元件之中。
(2). 在Spring的工作方式中,所有的類都會在spring容器中登記,告訴spring這是個什麼東西,你需要什麼東西,然後spring會在系統執行到適當的時候,把你要的東西主動給你,同時也把你交給其他需要你的東西。所有的類的建立、銷燬都由 spring來控制,也就是說控制物件生存週期的不再是引用它的物件,而是spring。對於某個具體的物件而言,以前是它控制其他物件,現在是所有物件都被spring控制,所以這叫控制反轉。
(3). 在系統執行中,動態的向某個物件提供它所需要的其他物件。
(4). 依賴注入的思想是通過反射機制實現的,在例項化一個類時,它通過反射呼叫類中set方法將事先儲存在HashMap中的類屬性注入到類中。 總而言之,在傳統的物件建立方式中,通常由呼叫者來建立被呼叫者的例項,而在Spring中建立被呼叫者的工作由Spring來完成,然後注入呼叫者,即所謂的依賴注入or控制反轉。 注入方式有兩種:依賴注入和設定注入; IoC的優點:降低了元件之間的耦合,降低了業務物件之間替換的複雜性,使之能夠靈活的管理物件。

AOP(Aspect Oriented Programming)
(1). AOP面向方面程式設計基於IoC,是對OOP的有益補充;
(2). AOP利用一種稱為“橫切”的技術,剖解開封裝的物件內部,並將那些影響了 多個類的公共行為封裝到一個可重用模組,並將其名為“Aspect”,即方面。所謂“方面”,簡單地說,就是將那些與業務無關,卻為業務模組所共同呼叫的 邏輯或責任封裝起來,比如日誌記錄,便於減少系統的重複程式碼,降低模組間的耦合度,並有利於未來的可操作性和可維護性。
(3). AOP代表的是一個橫向的關 系,將“物件”比作一個空心的圓柱體,其中封裝的是物件的屬性和行為;則面向方面程式設計的方法,就是將這個圓柱體以切面形式剖開,選擇性的提供業務邏輯。而 剖開的切面,也就是所謂的“方面”了。然後它又以巧奪天功的妙手將這些剖開的切面復原,不留痕跡,但完成了效果。
(4). 實現AOP的技術,主要分為兩大類:一是採用動態代理技術,利用擷取訊息的方式,對該訊息進行裝飾,以取代原有物件行為的執行;二是採用靜態織入的方式,引入特定的語法建立“方面”,從而使得編譯器可以在編譯期間織入有關“方面”的程式碼。
(5). Spring實現AOP:JDK動態代理和CGLIB代理 JDK動態代理:其代理物件必須是某個介面的實現,它是通過在執行期間建立一個介面的實現類來完成對目標物件的代理;其核心的兩個類是InvocationHandler和Proxy。 CGLIB代理:實現原理類似於JDK動態代理,只是它在執行期間生成的代理物件是針對目標類擴充套件的子類。CGLIB是高效的程式碼生成包,底層是依靠ASM(開源的java位元組碼編輯類庫)操作位元組碼實現的,效能比JDK強;需要引入包asm.jar和cglib.jar。 使用AspectJ注入式切面和@AspectJ註解驅動的切面實際上底層也是通過動態代理實現的。
(6). AOP使用場景:
Authentication 許可權檢查
Caching 快取
Context passing 內容傳遞
Error handling 錯誤處理
Lazy loading 延遲載入
Debugging  除錯
logging, tracing, profiling and monitoring 日誌記錄,跟蹤,優化,校準
Performance optimization 效能優化,效率檢查
Persistence  持久化
Resource pooling 資源池
Synchronization 同步
Transactions 事務管理
另外Filter的實現和struts2的攔截器的實現都是AOP思想的體現。

Spring MVC簡介
Spring MVC屬於Spring Framework的後續產品,已經融合在Spring Web Flow裡面,它原生支援的Spring特性,讓開發變得非常簡單規範。Spring MVC 分離了控制器、模型物件、分派器以及處理程式物件的角色,這種分離讓它們更容易進行定製。
Spring MVC的架構上次培訓已經介紹過了,下面這個是它主要的工作原理圖:
在這裡插入圖片描述

MyBatis簡介
MyBatis本是apache的一個開源專案iBatis, 2010年這個專案由apache software foundation 遷移到了google code,並且改名為MyBatis 。MyBatis是一個基於Java的持久層框架。iBATIS提供的持久層框架包括SQL Maps和Data Access Objects(DAO)MyBatis消除了幾乎所有的JDBC程式碼和引數的手工設定以及結果集的檢索。MyBatis使用簡單的XML或註解用於配置和原始對映,將介面和Java的POJOs(Plain Old Java Objects,普通的 Java物件)對映成資料庫中的記錄。可以這麼理解,MyBatis是一個用來幫你管理資料增刪改查的框架。
他的結構如下圖所示:
在這裡插入圖片描述