基於@AspectJ和schema的aop(二)---@AspectJ基礎文法

來源:互聯網
上載者:User

標籤:數組   基礎文法   表達   類型   exe   monit   span   操作   類類型   

  @AspectJ使用jdk5.0和正規的AspectJ切點運算式描述切面, 由於spring只支援方法的連接點,所以Spring只支援部分AspectJ的切點語言.

1.切點運算式函數

  AspectJ 5的切點運算式有關鍵字和巨集指令引數組成,如execution(* greetTo(..))的切點運算式, execution為關鍵字, "* greetTo(..)"為巨集指令引數.在這裡execution表示目標類執行某一方法, 而"* greetTo(..)"描述目標方法的匹配模式, 兩者聯合起來表示目標類greetTo()方法的連接點.為了描述方便, 將execution()稱作為函數, 而將匹配串"* greetTo(..)"稱為函數的入參.

  Spring支援9個@AspectJ切點運算式函數, 它們用不同的方式描述目標類的連接點.根據描述對象的不同, 可以大致分為4種類型.

  • 方法切點函數: 通過描述目標類方法資訊定義連接點
  • 方法入參切點函數: 通過描述目標類方法的入參資訊定義連接點
  • 目標類切點函數: 通過描述目標類類型資訊定義連接點
  • 代理類切點函數: 通過描述目標類的代理類的資訊定義連接點.

這四種類型的切點函數, 通過下表進行詳細說明:

類別 函數 入參 說明
方法切點函數 execution() 方法匹配模式 表示滿足某一模式的所有目標類方法連接點, 如execution(* greetTo(..))表示所有目標類中的greetTo()方法
@annotation() 方法註解類名 表示標註了特定註解的目標方法連接點, 如@annotation(com.bao.bao.aop.NeedTest)表示任何標註了@NeedTest註解的目標類方法
方法入參切點函數
args() 類名 通過判斷目標類方法運行時入參對象的類型定義指定連接點.如args(com.bao.bao.Waiter)表示所有有且僅有一個按類型匹配於Waiter入參的方法
@args() 類型註解類名 通過判斷目標方法運行時入參對象的類型是否標註特定註解來指定連接點, 如@args(com.bao.bao.Monitorable)表示任何這樣的一個目標方法, 它有一個入參且入參對象的類標註了@Monitorable註解
目標類切點函數 within() 類名匹配器 表示特定域下的所有連接點.如within(co.bao.bao.service.*)表示com.bao.bao.service包中的所有連接點.即包中所有的類的所有方法, 而within(com.bao.bao.service.*Service)表示在com.bao.bao.
代理類切點函數      

 

基於@AspectJ和schema的aop(二)[email protected]基礎文法

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.