




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、1面向方面的程序設計面向方面的程序設計兼談計算科學的創新兼談計算科學的創新2面向方面的程序設計面向方面的程序設計nAspect oriented programming(AOP)3n Xerox(施樂施樂)公司公司PARC研究中心在研究中心在19971997年的歐洲年的歐洲面向對象編程大會(面向對象編程大會(ECOOP97ECOOP97)上首次提出)上首次提出Aspect-Aspect-oriented programmingoriented programming(AOPAOP)。n 自自20022002年起,每年分別在歐洲和美國輪流召開專門年起,每年分別在歐洲和美國輪流召開專門的面向方面軟
2、件開發(的面向方面軟件開發(AOSDAOSD)國際會議。與會者包括)國際會議。與會者包括美國、加拿大、荷蘭、英國、法國、丹麥、日本、以美國、加拿大、荷蘭、英國、法國、丹麥、日本、以色列等。我國一些學校也對色列等。我國一些學校也對AOPAOP給以關注并開展了一些給以關注并開展了一些研究工作。研究工作。n 從從AOP概念提出經過了近十年的時間,這種技術概念提出經過了近十年的時間,這種技術現在已經開始被工業界采用。現在已經開始被工業界采用。 4AOPAOP產生的背景產生的背景 計算機軟件設計的一個重要原則,就是要清計算機軟件設計的一個重要原則,就是要清晰晰分離各種關注點分離各種關注點(separat
3、ion of concerns),然),然后分而治之,各個擊破,最后形成統一的解決方案。后分而治之,各個擊破,最后形成統一的解決方案。業務邏輯存儲日志安全需求關注點標識5 關注點:是指一個特定的目標、概念或者興趣域。關注點:是指一個特定的目標、概念或者興趣域。n從技術的角度,軟件系統分別包括從技術的角度,軟件系統分別包括核心級和系統級核心級和系統級的關的關注點。注點。n核心級關注點是系統要完成的核心級關注點是系統要完成的業務功能業務功能;n系統級關注點是完成核心級關注點所必須的系統級關注點是完成核心級關注點所必須的配套設施配套設施,這,這些配套設施通常被認為是整個系統的系統特性,或者是業些配套
4、設施通常被認為是整個系統的系統特性,或者是業務功能的功能約束。務功能的功能約束。例如:信用卡處理系統例如:信用卡處理系統 核心關注點是核心關注點是處理付款處理付款; 系統級關注點包括系統級關注點包括日志、事務、認證、安全和性日志、事務、認證、安全和性能能等等。等等。6n軟件系統中,某個行為,例如操作日志的軟件系統中,某個行為,例如操作日志的記錄,存在于軟件的各個部分中,這個行記錄,存在于軟件的各個部分中,這個行為可以看作是橫向存在于軟件之中,他所為可以看作是橫向存在于軟件之中,他所關注的是軟件的各個部分的一些共有的行關注的是軟件的各個部分的一些共有的行為。為。n在很多情況下,這種行為不屬于業務
5、邏輯在很多情況下,這種行為不屬于業務邏輯的一部分。這種操作并不是業務邏輯調用的一部分。這種操作并不是業務邏輯調用的必須部分,但是,我們卻往往不得在代的必須部分,但是,我們卻往往不得在代碼中顯式進行調用,并承擔由此帶來的后碼中顯式進行調用,并承擔由此帶來的后果。果。7n在目前的技術框架下,通常在目前的技術框架下,通常系統級關注點在系統級關注點在邏輯上邏輯上相互之相互之間間彼此正交(相互獨立),彼此正交(相互獨立),同時在同時在實現上實現上趨向于趨向于和若干核和若干核心模塊交織心模塊交織。 例如:信用卡管理系統的每個核心業務關注點都和安全、例如:信用卡管理系統的每個核心業務關注點都和安全、日志等系
6、統關注點相聯系。日志等系統關注點相聯系。8n核心級關注點核心級關注點(業務)多數情況下可以(業務)多數情況下可以被很好地分解,并被很好地分解,并通過編程語言模塊化通過編程語言模塊化實現(子模塊或軟構件)實現(子模塊或軟構件)。n系統級關注點系統級關注點(橫向關注點),使用當(橫向關注點),使用當前的程序設計方法導致前的程序設計方法導致在許多構件中要在許多構件中要重復包含(擴散)這些代碼重復包含(擴散)這些代碼。9橫切示例(crosscutting)nAuthentication 權限權限nCaching 緩存緩存nContext passing 內容傳遞內容傳遞nError handling
7、錯誤處理錯誤處理nLazy loading 懶加載懶加載nDebugging 調試調試nLogging、tracing、profiling and monitoring 日志、跟蹤、日志、跟蹤、優化、校準優化、校準nPerformance optimization 性能優化性能優化nPersistence 持久化持久化nResource pooling 資源池資源池nSynchronization 同步同步nTransactions 事務事務10現有軟件技術的不足 目前的實現技術只提供了一維方法學實現系統的關注點,該單一維度一般是核心需求和關注點的模塊化實現,其他類型的需求也被迫和該主導維度一
8、致。安安全全事事務務業業務務業務主導維業務主導維 問題空間是問題空間是n n維的,而解空間是一維的。這種失配必然導致需求和維的,而解空間是一維的。這種失配必然導致需求和實現之間的失配。實現之間的失配。11源程序就會變成一些為不同關注目的而編制的源程序就會變成一些為不同關注目的而編制的指令的纏結混亂物。指令的纏結混亂物。纏結現象纏結現象是現有軟件系統中許多不必要的是現有軟件系統中許多不必要的復雜性的核心復雜性的核心。它增加了功能構件之間的依賴性,它增加了功能構件之間的依賴性,分散了構件原來假定要做的事情,分散了構件原來假定要做的事情,提供了許多程序設計出錯的機會,提供了許多程序設計出錯的機會,使
9、得一些功能構件難以復用,使得一些功能構件難以復用,源代碼難以開發、理解和發展。源代碼難以開發、理解和發展。12v某一應用的領域專家,不太可能對分布、認證、某一應用的領域專家,不太可能對分布、認證、訪問控制、同步、加密、冗余等問題的復雜實訪問控制、同步、加密、冗余等問題的復雜實現機制很熟悉,所以就不能保證他們在程序中現機制很熟悉,所以就不能保證他們在程序中進行正確的調用。進行正確的調用。v開發人員很難正確預見到未來對程序的新需求開發人員很難正確預見到未來對程序的新需求。13方面(Aspect)n設計上講,是橫切系統的一些軟件系統級關注點。設計上講,是橫切系統的一些軟件系統級關注點。n實現上講,它
10、支持將橫切系統的關注點封裝在單獨的模塊單實現上講,它支持將橫切系統的關注點封裝在單獨的模塊單位中,它是位中,它是AOP將橫切關注點局部化和模塊化的實現機制。將橫切關注點局部化和模塊化的實現機制。n常見的常見的“方面方面”:異常和出錯處理異常和出錯處理同步和并發控制同步和并發控制 內存訪問模式內存訪問模式日志、安全日志、安全事務、性能事務、性能14 AOP AOP核心內容就是所謂的核心內容就是所謂的“橫切關注點橫切關注點”,即,即“方面方面”,AspectAspect是是AOPAOP提供的一種程序設計單元。提供的一種程序設計單元。而在而在OOP中中,這些一般關注點的實現單元叫作類這些一般關注點的
11、實現單元叫作類 AOPAOP的目標,是要將這些橫切關注點與業務邏的目標,是要將這些橫切關注點與業務邏輯代碼相分離,從而得到更好的軟件結構、性能以輯代碼相分離,從而得到更好的軟件結構、性能以及穩定性等方面的好處。及穩定性等方面的好處。 AOPAOP被認為是后面向對象時代的一種新的重要被認為是后面向對象時代的一種新的重要的程序設計技術。的程序設計技術。15AOP的基本思想n通過分別描述系統的不同關注點及其關系,以一種松耦合的方通過分別描述系統的不同關注點及其關系,以一種松耦合的方式實現單個關注點,然后依靠式實現單個關注點,然后依靠AOP環境的支撐機制,將這些關環境的支撐機制,將這些關注點組織或編排
12、成最終的可運行程序。注點組織或編排成最終的可運行程序。 普通關注點可以使用傳統的結構化方法和面向對象方法體統的機普通關注點可以使用傳統的結構化方法和面向對象方法體統的機制。制。 系統關注點使用系統關注點使用Aspect機制。機制。16AOP程序設計的一般步驟n一、一、對需求規約進行對需求規約進行Aspect分解。分解。n確定哪些功能是組件必須實現的,即提取出確定哪些功能是組件必須實現的,即提取出核心核心關注點。關注點。n哪些功能可以以哪些功能可以以aspect的形式動態加入到系統組的形式動態加入到系統組件中去,即提取出系統級的件中去,即提取出系統級的橫切關注點橫切關注點。17AOP程序設計的一
13、般步驟n二、二、對標識出的對標識出的Aspect分別通過程序機制實現。分別通過程序機制實現。 構造系統的組件。構造系統的組件。 利用利用組件語言組件語言實現系統的組件。對于實現系統的組件。對于OOP語言,這些組件可以是語言,這些組件可以是類;對于過程化程序設計語言,這些組件可以是各種函數和類;對于過程化程序設計語言,這些組件可以是各種函數和API。 構造系統的構造系統的aspect。 利用一種或多種利用一種或多種aspect語言語言實現實現aspect。 aspect語言必須提供聲明語言必須提供聲明aspect的機制。的機制。aspect如何聲明如何聲明連接點如何定義連接點如何定義aspect
14、代碼如何定義代碼如何定義aspect的參數化程度等的參數化程度等18n三、三、用用aspect編織器將所有的單元編排重組在一起,形成最終的可運行編織器將所有的單元編排重組在一起,形成最終的可運行系統。系統。 為組件語言和為組件語言和aspect語言構造相應的語法樹;依據語言構造相應的語法樹;依據aspect中的連接點中的連接點定義對語法樹進行聯結;在連接的語法樹上生成中間文件或目標代碼。定義對語法樹進行聯結;在連接的語法樹上生成中間文件或目標代碼。 aspect語言必須提供將語言必須提供將aspect代碼和基礎代碼組合編排(代碼和基礎代碼組合編排(weaving)在一起的機制。在一起的機制。定
15、義編排語言和規則。定義編排語言和規則。解決解決aspect之間潛在的沖突。之間潛在的沖突。為組裝和執行建立外部約束。為組裝和執行建立外部約束。 aspect語言必須提供生成可運行系統的實現機制。語言必須提供生成可運行系統的實現機制。系統的組合是在編譯時靜態組裝還是運行時動態進行。系統的組合是在編譯時靜態組裝還是運行時動態進行。對程序單元分別進行編譯的模塊化編譯機制。對程序單元分別進行編譯的模塊化編譯機制。對組裝結果的驗證機制等。對組裝結果的驗證機制等。19AOP的本質n 將橫切關注點(如日志、權限驗證、并發控制等非功能需將橫切關注點(如日志、權限驗證、并發控制等非功能需求)單獨用求)單獨用as
16、pect實現,而業務功能用現有的軟件技術實實現,而業務功能用現有的軟件技術實現。由現。由AOP機制提供將這些分離的關注點編織為一個可執行機制提供將這些分離的關注點編織為一個可執行程序。程序。n提高代碼的可理解性、可維護性、可復用性等。提高代碼的可理解性、可維護性、可復用性等。橫切關注點橫切關注點20AOP系統的軟件開發過程業務邏輯存儲日志安全需求關注點標識編織器Aspect分解Aspect重組21AOP與OOP比較OOP是是AOP的技術基礎,的技術基礎,AOP是對是對OOP的繼承和發的繼承和發展。展。n可擴展性:可擴展性: 指軟件系統在需求更改時程序的易更改能力。指軟件系統在需求更改時程序的易
17、更改能力。 OOP主要通過提供繼承和重載機制來提高軟件的主要通過提供繼承和重載機制來提高軟件的可擴展性。可擴展性。 AOP通過擴展通過擴展Aspect或增加或增加Aspect,系統相關的,系統相關的各個部分都隨之產生變化。各個部分都隨之產生變化。22n可重用性:可重用性: 指某個應用系統中的元素被應用到其他應用系統的能指某個應用系統中的元素被應用到其他應用系統的能力。力。 OOP以類機制作為一種抽象的數據類型,提供了比過以類機制作為一種抽象的數據類型,提供了比過程化更好的重用性。程化更好的重用性。nOOP的重用性對非特定于系統的功能模塊有很好的支持,的重用性對非特定于系統的功能模塊有很好的支持
18、,如堆棧的操作和窗口機制的實現。如堆棧的操作和窗口機制的實現。n對于不能封裝成類的元素,如異常處理等,很難實現重對于不能封裝成類的元素,如異常處理等,很難實現重用。用。AOP使不能封裝成類的元素的重用成為可能。使不能封裝成類的元素的重用成為可能。23n易理解性和易維護性易理解性和易維護性n代碼纏結問題的存在,使代碼纏結問題的存在,使OOP技術在易理解性和易維護技術在易理解性和易維護性方面都難有很大的提高。性方面都難有很大的提高。n統計發現:統計發現:“如果一個他人寫的程序有如果一個他人寫的程序有37處需要改動,處需要改動,對于一個最優秀的軟件開發人員,也大概只能找到對于一個最優秀的軟件開發人員
19、,也大概只能找到35個個”。n對于對于AOP,對一個,對一個Aspect修改可以通過聯結器影響到修改可以通過聯結器影響到系統相關的各個部分,從而大大提高系統的易維護性。系統相關的各個部分,從而大大提高系統的易維護性。24AOP特性nAspect的實現和傳統開發方法中的實現和傳統開發方法中模塊的實現不同模塊的實現不同。 Aspect的開發彼此獨立,是一種松耦合關系。的開發彼此獨立,是一種松耦合關系。 主代碼的開發者甚至可能沒有意識到主代碼的開發者甚至可能沒有意識到aspect的存在。的存在。只是在最后系統組裝時,才將各只是在最后系統組裝時,才將各aspect代碼和主代碼代碼和主代碼編排融合在一起
20、。編排融合在一起。主代碼和主代碼和AspectAspect之間采用之間采用“隱式調用隱式調用”。v 某一應用的領域專家,不太可能對分布、認證、訪問控制、同步、某一應用的領域專家,不太可能對分布、認證、訪問控制、同步、加密、冗余等問題的復雜實現機制很熟悉,所以就不能保證他們加密、冗余等問題的復雜實現機制很熟悉,所以就不能保證他們在程序中進行正確的調用。在程序中進行正確的調用。v 開發人員很難正確預見到未來對程序的新需求。開發人員很難正確預見到未來對程序的新需求。25AspectJnAspectJ是是Xerox PARC開發的基于開發的基于Java語言語言的的AOP擴展,它既是一種規約語言,也是一
21、擴展,它既是一種規約語言,也是一種種AOP的實現語言。的實現語言。nAspectJ是一種支持是一種支持“面向面向Aspect”概念的語言。概念的語言。26AspectJnAspectJ提供了支持提供了支持“面向面向Aspect”概念的如下語言結構及定概念的如下語言結構及定義:義: Joinpoints:預定義好的程序的特定執行點。:預定義好的程序的特定執行點。例如:例如: 方法的調用和執行方法的調用和執行 對屬性的讀寫訪問對屬性的讀寫訪問 異常處理異常處理 對象和類的初始化執行對象和類的初始化執行 構造器的調用和執行構造器的調用和執行27 Pointcuts:用來指明所需連接點的語言元素用來指
22、明所需連接點的語言元素。可能包括一系可能包括一系列的連接點列的連接點,同時它還可以為在連接點上執行的通知提供上同時它還可以為在連接點上執行的通知提供上下文下文。例如:例如: pointcut callSetter( ); call (public void HelloWorld.set*(.)。 其中:其中: pointcut說明聲明的是一個切入點,命名說明聲明的是一個切入點,命名 callSetter,后面的,后面的空括號表示該切入點不需要上下文信息。空括號表示該切入點不需要上下文信息。 Call表示該切入點捕獲的是對指定方法的調用,指定的方法是表示該切入點捕獲的是對指定方法的調用,指定的方
23、法是在類在類HelloWorld中聲明的共有的、返回值為空、以中聲明的共有的、返回值為空、以set開頭、開頭、擁有任意參數的方法。擁有任意參數的方法。28 Advices:要在:要在Pointcuts執行的執行的Aspect的代碼。的代碼。 AspectJ提供了提供了3種把通知關聯到連接點的方式:種把通知關聯到連接點的方式:after、before、around。 after和和before分別表示通知在連接分別表示通知在連接點的前面或者后面運行,點的前面或者后面運行,around則表示通知在連接點則表示通知在連接點的外面運行,并可以決定是否運行此連接點。的外面運行,并可以決定是否運行此連接點
24、。 例如:例如: 在銀行信息系統中,實現帳戶存取模塊、權限驗證模在銀行信息系統中,實現帳戶存取模塊、權限驗證模塊和日志記錄模塊。帳戶存取模塊可用塊和日志記錄模塊。帳戶存取模塊可用OOP技術來實技術來實現,其他的模塊可采用現,其他的模塊可采用AOP技術。技術。 在在around通知中驗證權限,只有驗證通過才運行該連通知中驗證權限,只有驗證通過才運行該連接點,在接點,在before和和after通知中就輸出日志記錄。通知中就輸出日志記錄。 Aspect:上述三者的結合。以類似于類的概念,將:上述三者的結合。以類似于類的概念,將Pointcut和和Advice組合在一起,形成一個程序單元。組合在一起
25、,形成一個程序單元。29nAspectJ為程序員提供了編譯、調試等工具。為程序員提供了編譯、調試等工具。nAspect編排器編排器n將不同將不同aspect組裝到一起。組裝到一起。nAspect調試器調試器n獨立的獨立的Aspect瀏覽器瀏覽器n和一些流行的和一些流行的IDE環境(環境( Forte 、 Jbuilder 、 Emacs )的集成。)的集成。nAspectJ可以引入新的數據成員和新的方法。可以引入新的數據成員和新的方法。30應用示例應用示例1:1:一個簡單的使用面向對象方法設計的圖元編輯器的示例。在該圖元編輯器在該圖元編輯器中,抽象圖元類中,抽象圖元類FigureElement
26、有有兩個圖元子類兩個圖元子類Point和和Line,分,分別對點和線進行別對點和線進行管理。這兩個類管理。這兩個類體現了良好的模體現了良好的模塊性,類中源代塊性,類中源代碼都緊密相關,碼都緊密相關,內聚度很高,并內聚度很高,并且每個類的接口且每個類的接口都很清晰都很清晰。顯示更新的需求:顯示更新的需求:無論圖元何時移動、無論圖元何時移動、移動到哪里,都要移動到哪里,都要通知屏幕管理器通知屏幕管理器(Display)其位)其位置發生了改變。置發生了改變。31 采用面向對象的設計方法,典型的做法是在每個移動圖采用面向對象的設計方法,典型的做法是在每個移動圖元的操作代碼中,都插入一段通知元的操作代碼
27、中,都插入一段通知Display其位置發生了改變其位置發生了改變的代碼(調用的代碼(調用Display.update( )方法),如圖所示。方法),如圖所示。Class Line private Point _p1,_p2; Point getP1( ) return _p1; Point getP2( ) return _p2; void setP1(Point p1)this._p1=p1; Display.update( ); void setP2(Point p2)this._p2=p2; Display.update( ); Class Point private int _x1,_
28、x2; int getX( ) return _x1; int getY( ) return _x2; void setX (int x1)this._x1=x1; Display.update( ); void setY(int x2)this._x2=x2; Display.update( ); 32Aspect DisplayUpdatingPointcut move(): call(void Line.setP1(Point)| call(void Line.setP2(Point)| call(void Point.setX(int)| call(void Point.setY(in
29、t); after() returning:move()Display.update(); Class Line private Point _p1,_p2; Point getP1( ) return _p1; Point getP2( ) return _p2; void setP1(Point p1)this._p1=p1; void setP2(Point p2)this._p2=p2; Class Point private int _x1,_x2; int getX( ) return _x1; int getY( ) return _x2; void setX (int x1)t
30、his._x1=x1; void setY(int x2)this._x2=x2; 33假設我們想用假設我們想用aspect做以下的事情:做以下的事情:n在任何對象調用在任何對象調用TestClass.sayHello()方法的前后打印一條消方法的前后打印一條消息。息。n測試測試TestClass.sayAnyThing()方法的參數至少有三個字符。方法的參數至少有三個字符。public class TestClasspublic void sayHello()System.out.println(“Hello,AOP”);public void SayAnyThing(String s)sy
31、stem.out.println(s);)public static void main(String args)TestClass t=newTestClass();t.sayHello();t.sayAnyThing(“ok”); 應用234public aspect MyAspectpublic pointcut sayMethodCall(): call(public void TestClass.say*();pub1ic pointcut sayMethodCal1Arg(String str): call(public void TestClass.sayAnyThing (st
32、ring)&args(str);before():sayMethodCal1() System.out.print1n(“nTestClass.”+ thisJoinPointStaticPart.getSignature().getName()+”start”);after():sayMethodCal1() System.out.print1n(“nTestClass.”+ thisJoinPointStaticPart.getSignature().getName()+”end”);before(String str):sayMethodCallArg(str) if(str.1
33、ength() 3) System.out.println(“Error:I cant say words less than 3 characters”); return; 35應用示例應用示例3 3:例外處理:例外處理 以數據庫查詢為例,分別用以數據庫查詢為例,分別用OOP的的Java語言語言和和AOPAOP的的AspectJAspectJ語言加以語言加以 實現。實現。public class DBQuery public ResultSet executeQuery(String sql)try/ 數據庫連接操作數據庫連接操作/ 數據庫查詢操作數據庫查詢操作catch(java.lang
34、.ClassNotFoundException e)/對對ClassNotFound 例外進行處理例外進行處理catch(SQLException e)/ 對對SQL例外進行處理例外進行處理catch(Exception e)/ 對其他例外進行處理對其他例外進行處理36分析以上代碼,主要存在以下幾點不足:分析以上代碼,主要存在以下幾點不足:n要求編程人員掌握大量的例外類庫和復雜的語法結構,要求編程人員掌握大量的例外類庫和復雜的語法結構,實際應用中容易出錯;實際應用中容易出錯;n對例外的處理并不是對例外的處理并不是DBQuery類的核心功能,但編程類的核心功能,但編程人員要花費大量精力在例外的處
35、理上,而忽略了問題人員要花費大量精力在例外的處理上,而忽略了問題本身;本身;n當當DBQuery所在類包中定義了多個類或所在類包中定義了多個類或DBQuery中中定義了多個方法時定義了多個方法時( (如數據庫記錄的添加、更新、刪除如數據庫記錄的添加、更新、刪除等操作),就要重復定義多個相同的例外處理;等操作),就要重復定義多個相同的例外處理;n大量的例外處理代碼可能引起更多的不必要錯誤,給大量的例外處理代碼可能引起更多的不必要錯誤,給程序調試和維護帶來了困難;程序調試和維護帶來了困難;基于以上幾點,可認為它是有安全隱患和不健壯的程序。基于以上幾點,可認為它是有安全隱患和不健壯的程序。37 基于
36、基于AOP 安全編程的思想,在安全編程的思想,在DBQuery類類中保留單純的數據庫連接和查詢代碼,而將其中保留單純的數據庫連接和查詢代碼,而將其中實現例外處理的代碼抽取出來,組織成單獨中實現例外處理的代碼抽取出來,組織成單獨模塊。模塊。 38aspect ExHandledeclare soft: Exception : within(DBQuery);pointcut Callmethod(DBQuery query):this(query)& call(* * DBQuery.*(.) ;after (DBQuery query) throwing (java.lang.Clas
37、sNotFoundException e): Callmethod(query) /對對ClassNotFound 例外進行處理例外進行處理after (DBQuery query) throwing (SQLException e ): Callmethod(query) /對對SQL例外進行處理例外進行處理 after (DBQuery query) throwing (Exception e ): Callmethod(query) /對其它對其它例外進行處理例外進行處理39 以下幾方面為突出的安全優點:以下幾方面為突出的安全優點:n程序開發人員可專注于數據庫連接和查詢操作本身,程序開發
38、人員可專注于數據庫連接和查詢操作本身,而無須同時考慮對例外的處理;而無須同時考慮對例外的處理;n安全代碼被獨立到單獨的安全代碼被獨立到單獨的aspect 中,使程序更易理解,中,使程序更易理解,且當安全策略需要修改時,只需變動且當安全策略需要修改時,只需變動ExHandle 代碼,代碼,而無需改動而無需改動DBQuery 類;類;n當添加新的類或當添加新的類或DBQuery類中添加新的方法時,編程類中添加新的方法時,編程人員不必考慮新的錯誤處理策略,甚至不必去了解這人員不必考慮新的錯誤處理策略,甚至不必去了解這些策略,些策略, ExHandle代碼將自動應用于它們。代碼將自動應用于它們。40應
39、用應用4 4:一個異常處理的實例:一個異常處理的實例 下面的代碼是一個簡單的方面的例子,它打印所下面的代碼是一個簡單的方面的例子,它打印所有的沒有被包中定義的任何方法處理的異常。我們能有的沒有被包中定義的任何方法處理的異常。我們能在測試時使用這個代碼,看是否有沒預料到的錯誤,在測試時使用這個代碼,看是否有沒預料到的錯誤,由此指出包中的一個漏洞。由此指出包中的一個漏洞。public aspect ExceptionPrinterpointcut allMethods( ):executions(* *();static after( ) throwing (Exception e):allMet
40、hods( )System.out.println(“Uncaught exception:”+ e);41應用5:AOP技術在并發訪問控制中的應用n當多個線程要訪問同一個變量或對象時,為了保證數當多個線程要訪問同一個變量或對象時,為了保證數據的一致性,要實施一些并發訪問控制策略。據的一致性,要實施一些并發訪問控制策略。n通常的做法是采用加鎖和解鎖的方法。即多個訪問類通常的做法是采用加鎖和解鎖的方法。即多個訪問類同時訪問一個共享數據對象時,每個訪問類在訪問這同時訪問一個共享數據對象時,每個訪問類在訪問這個數據對象時,將數據對象上鎖,訪問完成后,再解個數據對象時,將數據對象上鎖,訪問完成后,再解
41、鎖,供其他并發線程訪問。鎖,供其他并發線程訪問。workerAnotherworker數據對象數據對象上鎖上鎖解鎖解鎖上鎖上鎖解鎖解鎖42public aspect LockReentrantWriterPreferenceReadWriteLock rwl = new ReentrantWriterPreferenceReadWriteLock();public pointcut writeOperations( ): execution(public boolean Worker.createData( )| execution(public boolean Worker.updateDa
42、ta( ) | execution(public boolean AnotherWorker.updateData( );before( ): writeOperations( )rwl.writeLock( ).acquire( );/在寫操作之前上鎖在寫操作之前上鎖after( ): writeOperations( )rwl.writeLock( ).release( );/在寫操作之后解鎖在寫操作之后解鎖43AOPAOP研究內容研究內容nEarly aspects: aspect-oriented requirements engineering and architecture de
43、sign.nAspect-oriented modeling and designnDesign patterns for aspect-oriented systemsn 44nAspect-oriented programming languages, platforms and frameworksnType systems for aspectsnComposition models and operators for aspectsnOptimization and performance improvement of aspect-oriented composition45nAp
44、plication of AOSD in specific areas such as embedded systems, banking systems, ambient computing, etc.nAspects in feature-oriented approaches and product lines.nAspects in reengineering46小結小結nAOP起源于程序設計中起源于程序設計中“橫切橫切”引發的引發的“代碼散布代碼散布”和和“代碼交織代碼交織”問題。在目前的程序設計技術下,程問題。在目前的程序設計技術下,程序中的橫切無法避免,其實現代碼相互糾纏在一起,序中的橫切無法避免,其實現代碼相互糾纏在一起,是軟件復雜度的來源之一。是軟件復雜度的來源之一。nAOP就是要能分離出那些隱含的、相互交織糾纏的系就是要能分離出那些隱含的、相互交織糾纏的系統關注點,并使之明確。使用統關注點
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025春人教版道法七年級下冊《第二單元 煥發青春活力》大單元 ( 第五課 人生當自強)(計劃二課時)(第一課時 )(人要自強)教學設計2022課標
- 高職單招職業技能測試歷史常識常考知識點(75個)
- 嘎啦蘋果病蟲害防治
- 小學語文面試《白楊》說課稿
- 2024年CPSM研究方法試題及答案
- 2025年元宇宙行業政策分析:元宇宙行業標準引導新興領域健康發展
- 整體規劃2024年思政理論試題及答案
- 2024年CPSM學習反饋試題及答案
- 2025年度現代物流園區場地房屋租賃合同
- 二零二五年度景區停車場車位使用權轉讓協議書
- 礦山應急救援知識
- 《ISO 55013-2024 資產管理-數據資產管理指南》專業解讀和應用指導材料(雷澤佳編制-2024B0)-121-240
- 外科學(普外科)試卷
- 2024-2025學年小學信息技術(信息科技)五年級全一冊義務教育版(2024)教學設計合集
- 傳染病防治法培訓課件
- (完整)注冊安全工程師考試題庫(含答案)
- 古代小說戲曲專題-形考任務2-國開-參考資料
- 2024-2030年中國公安大數據行業市場深度調研及前景趨勢與投資研究報告
- 雙匯肉制品質量控制與溯源管理
- 蘇教版小學四年級數學下冊全冊教案
- 佳能Canon-EOS-450D用戶手冊使用說明書
評論
0/150
提交評論