AOP學習筆記

來源:互聯網
上載者:User

AOP開發過程中包括的工作:

1,分離出系統中的關注點(提取出橫切關注點,一般性關注點)
分開核心模組層級關注點和系統級的橫切關注點

系統中常見橫切關注點:
日誌
安全
許可權驗證
同步
效能監控
安全執行緒
協議驗證
緩衝管理
記憶體管理

...等
2,獨立開發實現橫切關注點

3,AOP架構設定關注點的連接點的位置(配置)

4,AOP架構會自動將模組關注點添加到指定連接點完成最終系統

5,通知(advice)規範,配置編織資訊

編織(waver)是AOP實現的關鍵,說明了整體開發策略
AOP的強大就在於可以根據編織規則重新組合系統的方便性上.
比如有些編織規則可以做到對系統中的所有類的所有公用方法添加日誌操作,可以對指定類指定公用方法添加.

AOP架構與原業務系統之間的互動過程:
使用者啟用AOP,AOP架構啟動過程中會根據配置資訊完成編織並載入原業務系統.
業務系統啟動後,AOP講不再對其控制,使用者以後的互動還是在原業務系統上.

注意:由於引入了AOP,系統啟動過程會因為AOP要完成對配置資訊的載入和方面的編織而導致業務系統的整體啟動時間比原來稍長

AOP主要完成2部分功能:
1,對架構進行初始化,包括配置資訊管理,方面管理,連接點管理,導言管理等
2,啟動原業務系統,包括配置資訊進行編織處理和啟動管理2部分

MyAop Framework:架構功能結構
|
|---Configuration Information Management:配置資訊管理(AOP提供動態配置關注點和連接點等資訊的功能,即每次改變更配置置檔案不需要重新編譯所有的類檔案,使用Annotation,XML等方式)
|---Notic Management:通知管理
 -1,AOP需要支援三種類型的通知,即before,after和around,before是相對於連接點之前執行的操作,after則是之後,around能夠控制連接點的執行動作,代替或者跳過連接點的操作
 -2,為了保證方面分離後還可以同原系統進行互動,三種類型的通知都需要通過參數傳遞的方式獲得原系統中連接點的多種資訊,如連接點的參數型別參數值和連接點方法名稱等
 -3,AOP提供通知介面供開發人員實現橫切關注點
|---Aspect Management:方面管理,主要負責組織AOP的所有方面.方面是添加到某連接點的所有通知的集合.其他連接點要使用相同的功能時,只要將該方面添加到連接點就可以了.
|---Connection Point Management:連接點管理
 -根據目前OOP的特性,AOP提供對方法,建構函式和欄位三種類型連接點的支援
 -AOP提供對同一連接點添加多個通知的支援.所有被添加到該連接點的通知按照順序執行,並且使用者可以控制通知的執行流程-代替或者跳過後面將要執行的通知
|---Introduction Management:導言管理,用來解決OOP中類的混合繼承問題,改變目前的單支繼承,使得一個類可以有2個以上的父類.每個導言通過添加多個mixin,可以實現混合繼承
|---Waver Handle:編織處理
 -1,AOP提供動態編織,編織的結果不能改變原系統的代碼.當原系統脫離AOP時,只是缺少了AOP提供的AOP功能,依然可以正常運行.
 -2,編織後不產生新的原始碼檔案.因為產生代碼檔案的編織方式,需要經過代碼產生和編譯的過程,會驗證影響運行速度.
 -3,編織的過程的配置資訊可以動態進行修改,每次更改編織規則都不需要重新編譯整個AOP架構及原業務系統.
|---Setup Management:啟動管理,主要負責原業務系統的載入與啟動

AOP核心部分-編織技術:

重要組成部分為編織時機及實現策略等
1,編織時機的選擇決定了架構的健壯性和可擴充性

編織操作可以發生在如下幾個階段:

編譯時間:在對原始碼進行編譯時間,特殊的編譯器允許我們通過某種方式指定程式中各個方面進行編織的規則,並根據這些規則產生編譯完成的應用程式
對於普通應用程式而言,在編譯時間進行編織操作是最為直觀的做法.由於來源程式中包含了應用的所有資訊,因此這種方式通常支援最多類的連接點.
利用編譯時間編織,我們能夠使用AOP系統進行細粒度的編織操作,例如讀取或寫入欄位.原始碼編譯之後形成的模組將喪事大量的資訊,因此通常採用
粗粒度的AOP方法.同時,對於傳統的編譯成為本地代碼的語言如C++,Fortran等來說,編譯完成後的模組往往跟作業系統平台相關,這就給建立統一的
編譯後、載入時以及運行時編織機製造成了困難.對於編譯成本地代碼的語言而言,只有在編譯時間進行編織是最為可行的.儘管編譯時間編織具有功能強大、
適應面廣泛等優點,但他的缺點也是很明顯。首先它需要程式員提供所有的原始碼,因此對於模組化的項目就力不從心了。即時能夠提供所有模組的
原始碼。它也造成了程式不能進行增量編譯、編譯時間變慢等不利之處。

編譯後:根據編織規則對已經完成編譯的程式模組進行編織操作
為瞭解決模組化編程的需求,有些AOP架構開始支援編譯後編織的功能,程式員只需要獲得編譯完成之後的模組,就能進行編織操作.在AspnetJ中,不管是
程式的主要邏輯部分還是方面都可以先便已成為模組之後進行編織,而且主要邏輯部分完全可以採用普通的JavaC編譯.而在AspcetC中,進行編譯後編織
的要求是所有的程式模組都採用AspectC進行編譯,可以看出,使用Java這樣基於虛擬機器的語言對於編寫AOP程式是有優勢的

載入時:在載入程式模組的時候進行編織操作
儘管編譯後編織已經解決了不能獲得所有原始碼時進行AOP編織的需求,但是在這個架構流行的時代,我們需要更為靈活的安排我們的編織操作.如果程式
的主要邏輯部分和方面作為不同的組件開發,那麼最為合理的編織時機就是在架構載入方面代碼之時.因此我們可以看到,在JBoss和Spring中都提供了這樣
的方式進行編織操作.在進行載入時編織時,編織操作之後的結果不會被儲存.程式的主要邏輯部分和方面部分可以分別進行開發和編譯,而且編織操作在程式
被載入時發生.AspectJ,Spring和JBoss都支援載入時編織.在Spring和JBoss的AOP實現中,架構先於應用程式啟動,由架構來負責編織操作的運行.而在AspcetC中,
一個特殊的類載入器被用於這個目的.這個類載入器可以方便的嵌入到架構應用程式中,從而能夠為任意的架構提供AOP支援.

運行時:在運行時,根據程式運行時的情況,編織程式中的對象和方面
運行時編織可能是所有編織方式中最為靈活的,程式在運行過程中可以為單個的對象指定是否需要編織特定的方面.在JBoss項目中,利用運行時編織的特性
完成了JBoss Cache項目.在JBoss Cache中,如果一個對象被放置到Cache中,它的狀態就被Cache AOP監視並且它的狀態會被自動同步到一個分布式的緩衝中.
如果這個對象不需要被緩衝,那麼它就和AOP不發生任何關係.對它的修改不會引發Cache的同步操作,值得一提的是,儘管AspectJ沒有明確提供運行時編織的能力
,在AspnetJ中可以通過一個簡單的pattern實現運行時編織.

AOP實現策略,目前有以下幾種:
1,JavaSE動態代碼技術
2,動態位元組碼產生技術
3,Java代碼產生技術
4,自訂類裝載技術
5,語言擴充技術

目前幾種主流AOP系統所支援的編織操作時機
                           AspectJ  Spring AOP  JBoss AOP  AspectC
Compile Time           √                                              √
Post Compile Time    √                                              √
Load Time               √              √               √
Run Time                                                 √

動態織入,IL織入,XML,編譯,Attribute中繼資料方式實現編織規則

AOP引擎 SetPoint
SetPoint是一款.NET架構下的全功能 (full-featured)AOP引擎.它著重為稱為語義切點(semantic pointcuts)的定義依賴RDF/OWL的使用.它的功能為一個IL-level,highly dynamic weaver&LENDL,一個令人信服的定義語言
項目首頁: http://setpoint.codehaus.org/
文檔地址: http://setpoint.codehaus.org/Tutorials
下載地址: http://setpoint.codehaus.org/Downloads

AOP引擎 DotNetAOP
DotNetAOP為 CLR language提供AOP 架構基礎屬性。

AOP架構 NAop
項目首頁: http://sourceforge.net/projects/aopnet/
: http://sourceforge.net/projects/aopnet/files

AOP架構 AspectSharp
AspectSharp是DotNet下的免費AOP架構,它以Dynamic Proxies和XML作為設定檔。
項目首頁: http://sourceforge.net/projects/aspectsharp/
: http://sourceforge.net/projects/aspectsharp/files/

AOP架構 Encase
Encase 是C#編寫開發的為.NET平台提供的AOP架構。Encase 獨特的提供了把方面(aspects)部署到運行時代碼,而其它AOP架構依賴設定檔的方式。這種部署方面(aspects)的方法協助缺少經驗的開發人員提高開發效率。
項目首頁: http://theagiledeveloper.com/articles/Encase.aspx

C#的AOP架構 NKalore
NKalore 是一款程式設計語言,它擴充了C#允許在.net平台使用AOP。NKalore的文法簡單、直觀,它的編譯器是基於Mono C#編譯器(MCS)。NKalore目前只能在命令列或#Develop內部使用。NKalore相容Common Language SpecificationCLS(Common Language Specification),它可以在任何.NET開發環境中使用,包括微軟的Visual Studio .NET。
項目首頁: http://aspectsharpcomp.sourceforge.net/
: http://aspectsharpcomp.sourceforge.net/download.htm

PostSharp
PostSharp讀取.NET位元組模組,轉換成物件模型。讓外掛程式分析和轉換這個模型並寫回到MSIL。
PostSharp使開發程式分析應用程式容易得像分析代碼規則和設計模式,它使程式開發的思想變革為面向方面軟體開發(AOSD/AOD)思想。
PostSharp is a tool that can reduce the number of lines of code in all major Microsoft .NET languages and improve its logical decoupling. Therefore its helps you delivering higher stability, cleaner design, and cheaper source code maintenance.
項目首頁: http://www.postsharp.org/
: http://www.postsharp.org/download

AOP開發過程中包括的工作:

1,分離出系統中的關注點(提取出橫切關注點,一般性關注點)
分開核心模組層級關注點和系統級的橫切關注點

系統中常見橫切關注點:
日誌
安全
許可權驗證
同步
效能監控
安全執行緒
協議驗證
緩衝管理
記憶體管理

...等
2,獨立開發實現橫切關注點

3,AOP架構設定關注點的連接點的位置(配置)

4,AOP架構會自動將模組關注點添加到指定連接點完成最終系統

5,通知(advice)規範,配置編織資訊

編織(waver)是AOP實現的關鍵,說明了整體開發策略
AOP的強大就在於可以根據編織規則重新組合系統的方便性上.
比如有些編織規則可以做到對系統中的所有類的所有公用方法添加日誌操作,可以對指定類指定公用方法添加.

AOP架構與原業務系統之間的互動過程:
使用者啟用AOP,AOP架構啟動過程中會根據配置資訊完成編織並載入原業務系統.
業務系統啟動後,AOP講不再對其控制,使用者以後的互動還是在原業務系統上.

注意:由於引入了AOP,系統啟動過程會因為AOP要完成對配置資訊的載入和方面的編織而導致業務系統的整體啟動時間比原來稍長

AOP主要完成2部分功能:
1,對架構進行初始化,包括配置資訊管理,方面管理,連接點管理,導言管理等
2,啟動原業務系統,包括配置資訊進行編織處理和啟動管理2部分

MyAop Framework:架構功能結構
|
|---Configuration Information Management:配置資訊管理(AOP提供動態配置關注點和連接點等資訊的功能,即每次改變更配置置檔案不需要重新編譯所有的類檔案,使用Annotation,XML等方式)
|---Notic Management:通知管理
 -1,AOP需要支援三種類型的通知,即before,after和around,before是相對於連接點之前執行的操作,after則是之後,around能夠控制連接點的執行動作,代替或者跳過連接點的操作
 -2,為了保證方面分離後還可以同原系統進行互動,三種類型的通知都需要通過參數傳遞的方式獲得原系統中連接點的多種資訊,如連接點的參數型別參數值和連接點方法名稱等
 -3,AOP提供通知介面供開發人員實現橫切關注點
|---Aspect Management:方面管理,主要負責組織AOP的所有方面.方面是添加到某連接點的所有通知的集合.其他連接點要使用相同的功能時,只要將該方面添加到連接點就可以了.
|---Connection Point Management:連接點管理
 -根據目前OOP的特性,AOP提供對方法,建構函式和欄位三種類型連接點的支援
 -AOP提供對同一連接點添加多個通知的支援.所有被添加到該連接點的通知按照順序執行,並且使用者可以控制通知的執行流程-代替或者跳過後面將要執行的通知
|---Introduction Management:導言管理,用來解決OOP中類的混合繼承問題,改變目前的單支繼承,使得一個類可以有2個以上的父類.每個導言通過添加多個mixin,可以實現混合繼承
|---Waver Handle:編織處理
 -1,AOP提供動態編織,編織的結果不能改變原系統的代碼.當原系統脫離AOP時,只是缺少了AOP提供的AOP功能,依然可以正常運行.
 -2,編織後不產生新的原始碼檔案.因為產生代碼檔案的編織方式,需要經過代碼產生和編譯的過程,會驗證影響運行速度.
 -3,編織的過程的配置資訊可以動態進行修改,每次更改編織規則都不需要重新編譯整個AOP架構及原業務系統.
|---Setup Management:啟動管理,主要負責原業務系統的載入與啟動

AOP核心部分-編織技術:

重要組成部分為編織時機及實現策略等
1,編織時機的選擇決定了架構的健壯性和可擴充性

編織操作可以發生在如下幾個階段:

編譯時間:在對原始碼進行編譯時間,特殊的編譯器允許我們通過某種方式指定程式中各個方面進行編織的規則,並根據這些規則產生編譯完成的應用程式
對於普通應用程式而言,在編譯時間進行編織操作是最為直觀的做法.由於來源程式中包含了應用的所有資訊,因此這種方式通常支援最多類的連接點.
利用編譯時間編織,我們能夠使用AOP系統進行細粒度的編織操作,例如讀取或寫入欄位.原始碼編譯之後形成的模組將喪事大量的資訊,因此通常採用
粗粒度的AOP方法.同時,對於傳統的編譯成為本地代碼的語言如C++,Fortran等來說,編譯完成後的模組往往跟作業系統平台相關,這就給建立統一的
編譯後、載入時以及運行時編織機製造成了困難.對於編譯成本地代碼的語言而言,只有在編譯時間進行編織是最為可行的.儘管編譯時間編織具有功能強大、
適應面廣泛等優點,但他的缺點也是很明顯。首先它需要程式員提供所有的原始碼,因此對於模組化的項目就力不從心了。即時能夠提供所有模組的
原始碼。它也造成了程式不能進行增量編譯、編譯時間變慢等不利之處。

編譯後:根據編織規則對已經完成編譯的程式模組進行編織操作
為瞭解決模組化編程的需求,有些AOP架構開始支援編譯後編織的功能,程式員只需要獲得編譯完成之後的模組,就能進行編織操作.在AspnetJ中,不管是
程式的主要邏輯部分還是方面都可以先便已成為模組之後進行編織,而且主要邏輯部分完全可以採用普通的JavaC編譯.而在AspcetC中,進行編譯後編織
的要求是所有的程式模組都採用AspectC進行編譯,可以看出,使用Java這樣基於虛擬機器的語言對於編寫AOP程式是有優勢的

載入時:在載入程式模組的時候進行編織操作
儘管編譯後編織已經解決了不能獲得所有原始碼時進行AOP編織的需求,但是在這個架構流行的時代,我們需要更為靈活的安排我們的編織操作.如果程式
的主要邏輯部分和方面作為不同的組件開發,那麼最為合理的編織時機就是在架構載入方面代碼之時.因此我們可以看到,在JBoss和Spring中都提供了這樣
的方式進行編織操作.在進行載入時編織時,編織操作之後的結果不會被儲存.程式的主要邏輯部分和方面部分可以分別進行開發和編譯,而且編織操作在程式
被載入時發生.AspectJ,Spring和JBoss都支援載入時編織.在Spring和JBoss的AOP實現中,架構先於應用程式啟動,由架構來負責編織操作的運行.而在AspcetC中,
一個特殊的類載入器被用於這個目的.這個類載入器可以方便的嵌入到架構應用程式中,從而能夠為任意的架構提供AOP支援.

運行時:在運行時,根據程式運行時的情況,編織程式中的對象和方面
運行時編織可能是所有編織方式中最為靈活的,程式在運行過程中可以為單個的對象指定是否需要編織特定的方面.在JBoss項目中,利用運行時編織的特性
完成了JBoss Cache項目.在JBoss Cache中,如果一個對象被放置到Cache中,它的狀態就被Cache AOP監視並且它的狀態會被自動同步到一個分布式的緩衝中.
如果這個對象不需要被緩衝,那麼它就和AOP不發生任何關係.對它的修改不會引發Cache的同步操作,值得一提的是,儘管AspectJ沒有明確提供運行時編織的能力
,在AspnetJ中可以通過一個簡單的pattern實現運行時編織.

AOP實現策略,目前有以下幾種:
1,JavaSE動態代碼技術
2,動態位元組碼產生技術
3,Java代碼產生技術
4,自訂類裝載技術
5,語言擴充技術

目前幾種主流AOP系統所支援的編織操作時機
                           AspectJ  Spring AOP  JBoss AOP  AspectC
Compile Time           √                                              √
Post Compile Time    √                                              √
Load Time               √              √               √
Run Time                                                 √

動態織入,IL織入,XML,編譯,Attribute中繼資料方式實現編織規則

AOP引擎 SetPoint
SetPoint是一款.NET架構下的全功能 (full-featured)AOP引擎.它著重為稱為語義切點(semantic pointcuts)的定義依賴RDF/OWL的使用.它的功能為一個IL-level,highly dynamic weaver&LENDL,一個令人信服的定義語言
項目首頁: http://setpoint.codehaus.org/
文檔地址: http://setpoint.codehaus.org/Tutorials
下載地址: http://setpoint.codehaus.org/Downloads

AOP引擎 DotNetAOP
DotNetAOP為 CLR language提供AOP 架構基礎屬性。

AOP架構 NAop
項目首頁: http://sourceforge.net/projects/aopnet/
: http://sourceforge.net/projects/aopnet/files

AOP架構 AspectSharp
AspectSharp是DotNet下的免費AOP架構,它以Dynamic Proxies和XML作為設定檔。
項目首頁: http://sourceforge.net/projects/aspectsharp/
: http://sourceforge.net/projects/aspectsharp/files/

AOP架構 Encase
Encase 是C#編寫開發的為.NET平台提供的AOP架構。Encase 獨特的提供了把方面(aspects)部署到運行時代碼,而其它AOP架構依賴設定檔的方式。這種部署方面(aspects)的方法協助缺少經驗的開發人員提高開發效率。
項目首頁: http://theagiledeveloper.com/articles/Encase.aspx

C#的AOP架構 NKalore
NKalore 是一款程式設計語言,它擴充了C#允許在.net平台使用AOP。NKalore的文法簡單、直觀,它的編譯器是基於Mono C#編譯器(MCS)。NKalore目前只能在命令列或#Develop內部使用。NKalore相容Common Language SpecificationCLS(Common Language Specification),它可以在任何.NET開發環境中使用,包括微軟的Visual Studio .NET。
項目首頁: http://aspectsharpcomp.sourceforge.net/
: http://aspectsharpcomp.sourceforge.net/download.htm

PostSharp
PostSharp讀取.NET位元組模組,轉換成物件模型。讓外掛程式分析和轉換這個模型並寫回到MSIL。
PostSharp使開發程式分析應用程式容易得像分析代碼規則和設計模式,它使程式開發的思想變革為面向方面軟體開發(AOSD/AOD)思想。
PostSharp is a tool that can reduce the number of lines of code in all major Microsoft .NET languages and improve its logical decoupling. Therefore its helps you delivering higher stability, cleaner design, and cheaper source code maintenance.
項目首頁: http://www.postsharp.org/
: http://www.postsharp.org/download

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.