什麼是AOP系列之一:AOP概念解析(轉)
什麼是AOP系列之一:AOP概念解析(轉)[@more@] 為什麼要區分J2EE容器和J2EE應用系統? 我們知道,J2EE應用系統只有部署在J2EE容器中才能執行,那麼為什麼劃分為J2EE容器和J2EE應用系統? 透過對J2EE容器執行機制的分析,我們可以發現:實際上J2EE容器分離了一般應用系統的一些通用功能,例如事務機制、安全機制以及物件池或執行緒池等效能最佳化機制。 這些功能機制是每個應用系統幾乎都需要的,因此可以從具體應用系統中分離出來,形成一個通用的框架平臺,而且,這些功能機制的設計開發有一定難度,同時執行的穩定性和快速性都非常重要,必須經過長時間除錯和執行經驗積累而成,因此,形成了專門的J2EE容器伺服器產品,如Tomcat JBoss、Websphere、WebLogic等。 從J2EE系統劃分為J2EE容器和J2EE應用系統兩個方面,我們已經看到一種分散關注的思路(separation of concerns)。 分散關注 將通用需求功能從不相關類之中分離出來;同時,能夠使得很多類共享一個行為,一旦行為發生變化,不必修改很多類,只要修改這個行為就可以。 AOP就是這種實現分散關注的程式設計方法,它將“關注”封裝在“方面”中。 AOP是什麼? AOP是OOP的延續,是Aspect Oriented Programming的縮寫,意思是面向方面程式設計。AOP實際是GoF設計模式的延續,設計模式孜孜不倦追求的是呼叫者和被呼叫者之間的解耦,AOP可以說也是這種目標的一種實現。 舉例:假設有在一個應用系統中,有一個共享的資料必須被併發同時訪問,首先,將這個資料封裝在資料物件中,稱為Data Class,同時,將有多個訪問類,專門用於在同一時刻訪問這同一個資料物件。 為了完成上述併發訪問同一資源的功能,需要引入鎖Lock的概念,也就是說,某個時刻,當有一個訪問類訪問這個資料物件時,這個資料物件必須上鎖Locked,用完後就立即解鎖unLocked,再供其它訪問類訪問。 使用傳統的程式設計習慣,我們會建立一個抽象類,所有的訪問類繼承這個抽象父類,如下: abstract class Worker{ abstract void locked(); abstract void accessDataObject(); abstract void unlocked(); } 缺點: accessDataObject()方法需要有“鎖”狀態之類的相關程式碼。Java只提供了單繼承,因此具體訪問類只能繼承這個父類,如果具體訪問類還要繼承其它父類,比如另外一個如Worker的父類,將無法方便實現。重用被打折扣,具體訪問類因為也包含“鎖”狀態之類的相關程式碼,只能被重用在相關有“鎖”的場合,重用範圍很窄。 仔細研究這個應用的“鎖”,它其實有下列特性: “鎖”功能不是具體訪問類的首要或主要功能,訪問類主要功能是訪問資料物件,例如讀取資料或更改動作。 “鎖”行為其實是和具體訪問類的主要功能可以獨立、區分開來的。 “鎖”功能其實是這個系統的一個縱向切面,涉及許多類、許多類的方法。如下圖: 因此,一個新的程式結構應該是關注系統的縱向切面,例如這個應用的“鎖”功能,這個新的程式結構就是aspect(方面)在這個應用中,“鎖”方面(aspect)應該有以下職責: 提供一些必備的功能,對被訪問物件實現加鎖或解鎖功能。以保證所有在修改資料物件的操作之前能夠呼叫lock()加鎖,在它使用完成後,呼叫unlock()解鎖。 AOP應用範圍 很明顯,AOP非常適合開發J2EE容器伺服器,目前JBoss 4.0正是使用AOP框架進行開發。具體功能如下: Authentication 許可權 Caching 快取 Context passing 內容傳遞 Error handling 錯誤處理 Lazy loading 懶載入 Debugging 除錯 logging, tracing, profiling and monitoring 記錄跟蹤 最佳化 校準 Performance optimization 效能最佳化 Persistence 持久化 Resource pooling 資源池 Synchronization 同步 Transactions 事務 AOP有必要嗎? 當然,上述應用範例在沒有使用AOP情況下,也得到了解決,例如JBoss 3.XXX也提供了上述應用功能,但是沒有使用AOP。 但是,使用AOP可以讓我們從一個更高的抽象概念來理解軟體系統,AOP也許提供一種有價值的工具。可以這麼說:因為使用AOP結構,現在JBoss 4.0的原始碼要比JBoss 3.X容易理解多了,這對於一個大型複雜系統來說是非常重要的。 從另外一個方面說,好像不是所有的人都需要關心AOP,它可能是一種架構設計的選擇,如果選擇J2EE系統,AOP關注的上述通用方面都已經被J2EE容器實現了,J2EE應用系統開發者可能需要更多地關注行業應用方面aspect。 AOP具體實現 AOP是一個概念,並沒有設定具體語言的實現,它能克服那些只有單繼承特性語言的缺點(如Java),目前AOP具體實現有以下幾個專案: AspectJ (TM): 建立於Xerox PARC. 有近十年曆史,技術成熟。 缺點:過於複雜;破壞封裝;需要專門的Java編譯器。 動態AOP:使用JDK的動態代理API或位元組碼Bytecode處理技術。 基於動態代理API的具體專案有: JBoss 4.0 JBoss 4.0伺服器 nanning 基於位元組碼的專案有: aspectwerkz spring ? -->linux電子圖書免費下載和技術討論基地·上一篇:什麼是AOP系列之二:AOP與許可權控制實現·下一篇:JRockitJVM對AOP的支援,第2部分
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8225414/viewspace-968190/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 什麼是AOP系列之二:AOP與許可權控制實現(轉)
- Spring系列之aAOP AOP是什麼?+xml方式實現aop+註解方式實現aopSpringXML
- 什麼是AOP程式設計?程式設計
- 什麼是AOP,以及在Springboot中自定義AOPSpring Boot
- C#進階系列——AOP?AOP!C#
- Spring AOP概念理解Spring
- Spring AOP(面向切面程式設計)是什麼?Spring程式設計
- AOP原始碼解析之二-建立AOP代理前傳,獲取AOP資訊原始碼
- Spring系列.AOP使用Spring
- 深入Spring官網系列(十八):AOP詳細解析!Spring
- Spring AOP 原始碼解析Spring原始碼
- Spring AOP系列(五)—反射Spring反射
- Spring入門學習手冊 3:AOP是個什麼鬼?Spring
- Spring AOP代理執行解析Spring
- Spring系列.AOP原理簡析Spring
- Spring框架系列之AOP思想Spring框架
- 設計模式:代理模式是什麼,Spring AOP還和它有關係?設計模式Spring
- AOP
- AOP 面向方面程式設計的介紹----基本概念(2) (轉)程式設計
- AOP 面向方面程式設計的介紹----基本概念(3) (轉)程式設計
- AOP詳解之三-建立AOP代理後記,建立AOP代理
- Spring IOC/AOP原理極簡概念入門Spring
- 《AOP挖掘記》概念介紹及原理初探(一)
- spring之AOP的概念及簡單案例Spring
- Spring基礎只是—AOP的概念介紹Spring
- 求求你,下次面試別再問我什麼是 Spring AOP 和代理了!面試Spring
- Spring核心系列之AOP(一)Spring
- Spring核心系列之AOP(二)Spring
- 雲原生是什麼?核心概念和應用方法解析
- 什麼是JavaScript閉包終極全解之一——基礎概念JavaScript
- AOP - AspectJ
- Spring中AOP相關原始碼解析Spring原始碼
- Spring事務管理—aop:pointcut expression解析SpringExpress
- [轉]Spring AOP中文教程Spring
- Spring框架系列(10) - Spring AOP實現原理詳解之AOP代理的建立Spring框架
- 理解Spring(二):AOP 的概念與實現原理Spring
- 聊一聊 AOP :表現形式與基礎概念
- 對於Spring中AOP,DI,IoC概念的理解Spring