2014-03-25 40 views
2

我目前正在研究有關AOP的,哪些是諮詢它的重要組成部分,切入點,連接點。 我看了一下什麼是諮詢,並從這個鏈接切入點一個非常簡單易懂的解釋。 Aspect Oriented Programming vs. Object-Oriented Programming連接點在面向方面的編程

不過,我有一個難題,就是了解什麼加點是。從我讀的內容來看,Join Points是程序結構中定義明確的位置,其中一個方面可以在其建議代碼中編織。

但是,當它是一個真實的例子時,我找不到任何好的例子來理解Join Points的例子。

從該例子在上面的鏈接採取,如果建議和Poincuts是什麼寫在下面,不是在哪裏我們定義的連接點?

經典方法:

void set...(...) { 
    : 
    : 
    Display.update(); 
} 

建議:

after() : set() { 
    Display.update(); 
} 

Poincuts:

pointcut set() : execution(* set*(*)) && this(MyGraphicsClass) && within(com.company.*); 

回答

2

void set...(...)連接點


正如你所知道的看點關注的協會,切入點連接點

  • 一個橫切關注點的實現被稱爲關注
  • 其中關注的是將要被附接的一類內的良好限定的位置是連接點
  • 其中指定了連接點(S)的位置,或者通過配置或代碼,是切入點

一個關注的東西是一個或多個利益相關者很重要。此外,關注問題可以概念上分爲兩類(每種方法的實現可以相同):

副作用:不會改變連接點行爲,而是引入其他操作的問題。

記錄問題是一個副作用的好例子,例如

例如,每次調用目標方法(這是在連接點)BankWithdrawalHandler.Execute(ICommand command)首先調用關注LoggingConcern.Execute(ICommand command)

將能夠前後Execute方法後運行,記錄這樣的事情開始時間/結束時間/總的時間/在參數輸入/輸出參數等

副作用,可:根據需要和任何行動附加處理

  • 檢查/捕獲在輸出結果

    • 檢查/捕獲在目標切入點的輸入參數根據需要有針對性的切入點和行動的任何附加處理

    的忠告:一個關注,這將潛在地改變目標方法的輸入和/或輸出。

    緩存問題是一個簡單的例子 - 例如,無論何時運行時執行目標方法(這是連接點),Repository.Find<T>(long id)方法CacheConcern.Find<T>(long Id)將被配置爲首先運行,並且只允許在高速緩存中找不到該值的情況下繼續執行Repository.Find()方法。

    的建議可以:

    • 在靶向切入點檢查輸入參數,並根據需要
    • 修改它們取消或避免目標方法的執行,並用不同的實現替換它
    • 檢查目標方法的輸出結果並根據需要進行修改或替換

    在.NET中,存在許多已建立的技術荷蘭國際集團的切入點

    • 後生成IL織造/ PostSharp
    • 依賴倒置((IOC)控制反轉和依賴倒置(DI))
    • 截留/ DynamicProxy