Spring.NET學習筆記15——AOP的配置(基礎篇)

 上篇我學習了Spring.NET的四種通知類型,AOP的實現方案比較複雜,是通過代碼實現的。而Spring.NET框架給我們提供了配置的方式來實現AOP的功能。到目前爲止,我們已經討論過使用ProxyFactoryObject或其它類似的工廠對象顯式創建AOP代理的方法。如果應用程序需要創建很多AOP代理,比如當需要代理某個服務層的所有對象時,這種方法就會使配置文件變的相當龐大。爲簡化配置過程,Spring.NET提供了“自動代理”的功能,可以根據條件自動創建代理對象,也就是說,可以將多個對象分組以作爲要代理的候選對象。自動代理使用起來比較簡單和方便。我仔細分析了一下,提供的幾種配置差異主要在於切入點的方式不同。目前我實現了三種切入點的配置方式。

  首先我們先來看一下準備環境。 

 

  一、對象名稱切入點ObjectNameAutoProxyCreator  

  ObjectNameAutoProxyCreator用特定的文本值或通配符匹配目標對象的名稱,併爲滿足條件的目標對象創建AOP代理。該類支持模式匹配字符串,如:"*name","name*",”*name*和精確文本如"name"我們可以通過下面這個簡單的例子瞭解一下自動代理的功能。

 

 

  輸出效果:圖1
圖1

 

  使用ObjectNameAutoProxyCreator經常需要對要攔截的方法進行篩選,這時我用到Spring.Aop.Support.NameMatchMethodPointcutAdvisor,稍微修改一下配置:

 

  輸出效果:圖2
圖2

  MappedNames的配置爲:Find*,因此能夠攔截到FindAll方法。


  二、正則表達式切入點RegularExpressionMethodPointcutAdvisorSdkRegularExpressionMethodPointcut
  DefaultAdvisorAutoProxyCreator類會在當前容器中自動應用滿足條件的Advisor,而不用在自動代理Advisor的對象定義中包含特定的對象名。它既可以保持配置文件的一致性,又可避免ObjectNameAutoProxyCreator引起的配置文件的臃腫。

  先來說RegularExpressionMethodPointcutAdvisor。

 

輸出效果:圖3
圖3

  以上配置相對複雜一點。使用SdkRegularExpressionMethodPointcut的配置就相對簡單的多,而項目中SdkRegularExpressionMethodPointcut也經常用到
  SdkRegularExpressionMethodPointcut只需要簡單的配置一下通知和切入點就完成了。

 

輸出效果:圖4

圖4
  pattern屬性爲攔截表達式。Service.*的意思是,攔截Service命名空間下(包括子空間)的所有類。如果改爲Service.*.Find*",意思爲攔截Service命名空間下(包括子空間)的所有類以Find開頭的方法或Service命名空間下以Find開頭的所有類

 

輸出效果:圖5

圖5

 

  三、屬性切入點AttributeMatchMethodPointcutAdvisor
Spring.NET框架運行開發人員自定義屬性,攔截標註帶有特定屬性的類中的方法。

 

 

 

  輸出效果:圖6
圖6

 

  代碼下載

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章