AOP的一些概念
咱們從定義一些核心的AOP概念開始。這些名詞並非Spring.NET專有的。不幸的是,AOP的術語並不一看上去那麼淺顯易懂。然而若是Spring.NET使用本身的名詞會更加讓人困惑。正則表達式
- 切面(aspect):一個關注點的模塊化,這個關注點在執行時候可能橫切多個實體對象。在企業級應用中,事務管理就是一個很好的橫切例子。 切面在Spring.NET中被看成通知器(Advisors)或者攔截器(interceptors)。
- 鏈接點(Joinpoint):程序執行時候的一些時間點,例如調用一個方法的時候,或者一個特定的異常被拋出的時候。
- 通知(Advice):AOP框架在特定的鏈接點執行的動做。不一樣類型的通知包括」環繞「,」前置「和」拋出異常後「。通知的類型將會在下文中討論。不少AOP框架,包括Spring.NET,模型和通知都被看成攔截器」interceptor「,這些框架就圍繞着鏈接點去維護這一系列攔截器。
- 切入點(Pointcut):當一個通知被激活的時候的一系列鏈接點。一個AOP框架必須可讓開發者去定義特定的切入點,例如使用正則表達式。
- 引入(Introduction):向一個通知類中加入方法或者屬性。Spring.NET容許你將新的接口引入到任何的通知實體中。例如,你可使用通知讓任何實體去實現IAuditable接口來使追蹤實體狀態的變化更加簡便。
- 目標(Target object):包含鏈接點的實體,能夠是被通知或者代理對象。
- AOP代理(AOP proxy):AOP框架生成的實體,包括通知。在Spring.NET中,一個AOP代理是一個動態代理,在進行時經過IL中間語言生成。
- 織入(Weaving):將多個切面組合成一個通知實體。這個能夠在編譯時(例如使用 GripperLoom.NET compiler)或者在運行時完成。Spring.NET是在運行時完成織入。
不一樣的通知類型包括:框架
- 環繞通知(Around advice):通知圍繞一個鏈接點,例如一個方法被調用。這個是一種最強大的通知類型。環繞通知會在方法調用先後完成自定義的行爲,它也會選擇是否繼續執行鏈接點或直接返回它們本身的返回值或拋出異常來結束執行。
- 前置通知(Before advice):通知在鏈接點以前執行,可是並無能力阻止接下來的程序執行(除非程序拋出異常)。
- 拋出異常後通知(Throws advice):通知在一個方法拋出異常以後執行。Spring.NET提供了強類型的拋出異常後通知,因此你能夠截獲你須要的異常而不必定去處理這些異常。
- 返回後通知(After returning advice):通知在鏈接點正常通過後執行,例如一個方法正常返回沒有拋出異常。