技術 > aop
目錄
No. 1
  面嚮方面編程:aspect oriented programmingaop為aspect oriented programming的縮寫,意為:面嚮方法編程,可以通過預編譯方式和運行期動態代理實現在不修改源代碼的情況下給程序動態統一添加功能的一種技術。
  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
  面嚮agent的編程:agent orented progarmming來自人工智能領域,號稱第六代編程語言,與面嚮對象的編程:即:oop相比,它更具主動性、學習型、協同性。 具體可查找agent技術相關知識。
No. 2
  aop:advance online publication.在綫雜志出版物。
  面嚮切面編程:Aspect Oriented Programming
  aop是OOP的延續,是Aspect Oriented Programming的縮寫,意思是面嚮切面編程。可以通過預編譯方式和運行期動態代理實現在不修改源代碼的情況下給程序動態統一添加功能的一種技術。aop實際是GoF設計模式的延續,設計模式孜孜不倦追求的是調用者和被調用者之間的解耦,aop可以說也是這種目標的一種實現。
  在Spring中提供了面嚮切面編程的豐富支持,允許通過分離應用的業務邏輯與係統級服務(例如審計(auditing)和事務(transaction)管理)進行內聚性的開發。應用對象衹實現它們應該做的——完成業務邏輯——僅此而已。它們並不負責(甚至是意識)其它的係統級關註點,例如日志或事務支持。
  應用舉例:假設有在一個應用係統中,有一個共享的數據必須被並發同時訪問,首先,將這個數據封裝在數據對象中,稱為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
相關詞
手機移動終端在綫應用服務管理平臺