@Pointcut的用法

Pointcut 是指那些方法需要被執行"AOP",是由"Pointcut Expression"來描述的.
Pointcut可以有下列方式來定義或者通過&& || 和!的方式進行組合.?
args()
@args()
execution()
this()
target()
@target()
within()
@within()
@annotation
其中execution 是用的最多的,其格式為:
execution(modifiers-pattern? ret-type-pattern declaring-type-pattern? name-pattern(param-pattern)throws-pattern?)
returning type pattern,name pattern, and parameters pattern是必須的.
ret-type-pattern:可以為*表示任何返回值,全路徑的類名等.
name-pattern:指定方法名,*代表所以,set*,代表以set開頭的所有方法.
parameters pattern:指定方法參數(聲明的類型),(..)代表所有參數,(*)代表一個參數,(*,String)代表第一個參數為任何值,第二個為String類型.
舉例說明:
任意公共方法的執行:
execution(public * *(..))
任何一個以“set”開始的方法的執行:
execution(* set*(..))
AccountService 接口的任意方法的執行:
execution(* com.xyz.service.AccountService.*(..))
定義在service包里的任意方法的執行:
execution(* com.xyz.service.*.*(..))
定義在service包和所有子包里的任意類的任意方法的執行:
execution(* com.xyz.service..*.*(..))
定義在pointcutexp包和所有子包里的JoinPointObjP2類的任意方法的執行:
execution(* com.test.spring.aop.pointcutexp..JoinPointObjP2.*(..))")
***> 最靠近(..)的為方法名,靠近.*(..))的為類名或者接口名,如上例的JoinPointObjP2.*(..))

pointcutexp包里的任意類.
within(com.test.spring.aop.pointcutexp.*)
pointcutexp包和所有子包里的任意類.
within(com.test.spring.aop.pointcutexp..*)
實現了Intf接口的所有類,如果Intf不是接口,限定Intf單個類.
this(com.test.spring.aop.pointcutexp.Intf)
***> 當一個實現了接口的類被AOP的時候,用getBean方法必須cast為接口類型,不能為該類的類型.

帶有@Transactional標注的所有類的任意方法.
@within(org.springframework.transaction.annotation.Transactional)
@target(org.springframework.transaction.annotation.Transactional)
帶有@Transactional標注的任意方法.
@annotation(org.springframework.transaction.annotation.Transactional)
***> @within和@target針對類的注解,@annotation是針對方法的注解

參數帶有@Transactional標注的方法.
@args(org.springframework.transaction.annotation.Transactional)
參數為String類型(運行是決定)的方法.
args(String)
Pointcut 可以通過Java注解和XML兩種方式配置,如下所示:
[html]?view plaincopy
  1. <aop:config>??
  2. ????<aop:aspectrefaop:aspectref="aspectDef">??
  3. ????????<aop:pointcutidaop:pointcutid="pointcut1"expression="execution(*?com.test.spring.aop.pointcutexp..JoinPointObjP2.*(..))"/>??
  4. ????????<aop:before?pointcut-ref="pointcut1"?method="beforeAdvice"?/>??
  5. ????</aop:aspect>??
  6. </aop:config>??
  7. ??
  8. @Component??
  9. @Aspect??
  10. public?class?AspectDef?{??
  11. ????//@Pointcut("execution(*?com.test.spring.aop.pointcutexp..JoinPointObjP2.*(..))")??
  12. ????//@Pointcut("within(com.test.spring.aop.pointcutexp..*)")??
  13. ????//@Pointcut("this(com.test.spring.aop.pointcutexp.Intf)")??
  14. ????//@Pointcut("target(com.test.spring.aop.pointcutexp.Intf)")??
  15. ????//@Pointcut("@within(org.springframework.transaction.annotation.Transactional)")??
  16. ????//@Pointcut("@annotation(org.springframework.transaction.annotation.Transactional)")??
  17. ????@Pointcut("args(String)")??
  18. ????public?void?pointcut1()?{??
  19. ????}??
  20. ????@Before(value?=?"pointcut1()")??
  21. ????public?void?beforeAdvice()?{??
  22. ????????System.out.println("pointcut1?@Before...");??
  23. ????}??
22

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/451458.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/451458.shtml
英文地址,請注明出處:http://en.pswp.cn/news/451458.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

restful風格使用小例

1. 頁面傳參數寫法&#xff1a; http://write.blog.csdn.net/ 參數1 / 參數2 / 參數N restful風格是把參數 直接拼在 / 后面&#xff0c;而不是URL地址重寫方式。 2. 后臺接收用法&#xff1a;

Mac 10.12徹底關閉Dashboard

1、打開【系統偏好設置】。 2、點擊進入【Mission Control】。 3、中間有一項【Dashboard】&#xff0c;點擊它右邊的下拉菜單&#xff0c;選擇【關閉】&#xff0c;即可。 轉載于:https://www.cnblogs.com/EasonJim/p/9547489.html

BHO插件操作IE瀏覽器,js調用C#方法

BHO是IE瀏覽器的擴展程序&#xff0c;全名Browser Helper Object&#xff0c;文件格式為DLL文件。可對IE瀏覽器的界面和訪問內容進行修改操作。BHO只適用于IE瀏覽器&#xff0c;對其他任何瀏覽器都沒有作用。&#xff08;引用自百度百科>_<&#xff09; 本示例實現的功能…

多線程讀取文件File

Java代碼 import java.io.*; class DownThread extends Thread { //定義字節數組&#xff08;取水的竹筒&#xff09;的長度 private final int BUFF_LEN 32; //定義讀取的起始點 private long start; //定義讀取的結束點 private long end; …

LeetCode-----翻轉二叉樹

題目——翻轉二叉樹 翻轉一棵二叉樹。 示例&#xff1a; 輸入&#xff1a; 4/ \2 7/ \ / \ 1 3 6 9 輸出&#xff1a; 4/ \7 2/ \ / \ 9 6 3 1 備注: 這個問題是受到 Max Howell 的 原問題 啟發的 &#xff1a; 谷歌&#xff1a;我們90&#xff05;的工…

JAVA中字符串比較equals()和equalsIgnoreCase()的區別

1、使用equals( )方法比較兩個字符串是否相等。它具有如下的一般形式&#xff1a; boolean equals(Object str) 這里str是一個用來與調用字符串&#xff08;String&#xff09;對象做比較的字符串&#xff08;String&#xff09;對象。如果兩個字符串具有相同的字符和長度&…

Spring Boot 是什么,有什么用。

見&#xff1a;http://www.csdn.net/article/a/2016-05-12/15838098 maven/Java/web/bootstrap/dataTable/app開發QQ群&#xff1a;566862629。希望更多人一起幫助我學習。 首先&#xff0c;我們來看一下spring boot是什么&#xff0c;它幫助我們解決了哪些問題&#xff1a; …

純html5+css3能寫出什么驚人效果?

在搞清楚這個問題之前,我們得先弄清楚H5和css3有哪些驚人的特性首先我們來看下H5的新特性,canvas標簽,多媒體標簽(audio/video) 離線存儲, 新的表單元素, 新的表單控件 地理定位等等,要說道驚人效果,其中canvas audio video 還有地理定位等就可以夠玩一年 但題目中的一個純字,一…

FPGA數據傳輸模塊設計

摘要 FPGA適合于大量數據處理的應用&#xff0c;廣泛應用于嵌入式系統。本文設計的FPGA模塊需要對GPS、便攜打印機和串口數據進行處理&#xff0c;將詳細介紹如何設計FPGA和不同外設之間的數據傳輸。同時&#xff0c;在RTL編碼中&#xff0c;編寫使綜合與布局布線效果更佳的代碼…

java獲取當前時間戳的方法

獲取當前時間戳 //方法 一 System.currentTimeMillis(); //方法 二 Calendar.getInstance().getTimeInMillis(); //方法 三 new Date().getTime(); 獲取當前時間 SimpleDateFormat df new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//設置日期格式 String date df.…

解決Linux 忘記root 密碼的辦法

今天突然遇到一個問題&#xff0c;那別人的 linux 系統發現root 密碼竟然不知道&#xff0c;這就尷尬了。經過一番百度&#xff0c;記錄下 如何修改root 密碼 1&#xff1a;開機linxu 按E 鍵 2&#xff1a;繼續按E 鍵 3:選擇 kernel..... 按E 4&#xff1a;在rhgb quiet 后面加…

tomcat的class加載的優先順序

來源&#xff1a;https://bbs.csdn.net/topics/80459833Tomcat的class加載的優先順序一覽 最先是$JAVA_HOME/jre/lib/ext/下的jar文件。環境變量CLASSPATH中的jar和class文件。\$CATALINA_HOME/common/classes下的class文件。\$CATALINA_HOME/commons/endorsed下的jar文件。\$C…

簡單理解Hadoop(Hadoop是什么、如何工作)

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 一、Hadoop主要的任務部署分為3個部分&#xff0c;分別是&#xff1a;Client機器&#xff0c;主節點和從節點。主節點主要負責Hadoop兩個…

JPA @Id 和 @GeneratedValue 注解詳解

Id&#xff1a; Id 標注用于聲明一個實體類的屬性映射為數據庫的主鍵列。該屬性通常置于屬性聲明語句之前&#xff0c;可與聲明語句同行&#xff0c;也可寫在單獨行上。 Id標注也可置于屬性的getter方法之前。 GeneratedValue&#xff1a; GeneratedValue 用于標注主鍵的生…

Factorials 階乘

Description N的階乘寫作N!表示小于等于N的所有正整數的乘積。階乘會很快的變大&#xff0c;如13!就必須用32位整數類型來存儲&#xff0c;70&#xff01;即使用浮點數也存不下了。你的任務是找到階乘最后面的非零位。舉個例子,5!1*2*3*4*5120所以5!的最后面的非零位是2&#x…

硬件模塊設計思想

硬件模塊設計">模塊設計,顧名思義就是將各個不同的功能做成獨立的模塊。然后將各個模塊組合成不同的產品。 對于一個公司硬件模塊化設計,從設計之初,調試,到樣機及產品生產的過程應該是這樣&#xff1a; 1.     了解產品需求 2.     根據需求,選擇合適的處理…

java中的lastIndexOf( )函數是什么意思

int x a.lastIndexOf(b),表示b字符串在a字符串中最后出現的位置。如 a "abcdabcd";b"d";那么x的值為7.

2 分鐘讀懂大數據框架 Hadoop 和 Spark 的異同

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 談到大數據&#xff0c;相信大家對Hadoop和Apache Spark這兩個名字并不陌生。但我們往往對它們的理解只是提留在字面上&#xff0c;并沒有…

操作系統文件編程知識

文件的創建和讀寫 當我們需要打開一個文件進行讀寫操作的時候&#xff0c;我們可以使用系統調用函數open。使用完成以后我們調用另外一個close函數進行關閉操作。 該函數使用的頭文件如下&#xff1a; #include <fcntl.h> #include <unistd.h> #include <sys/ty…

論述HTML5平臺的若干重要特性

開發者已憑借網頁技術制作出創收豐厚的游戲作品許多年&#xff1a;《部落戰爭》憑借靜態網頁頁面大獲成功&#xff0c;《Farmville》憑借Flash開拓出新的疆域。但如今越來越多人覺得&#xff0c;未來HTML5將變成游戲的主要平臺。為什么HTML5如此頗具趣味&#xff0c;它是否真的…