JoinPoint的用法

JoinPoint 對象

JoinPoint對象封裝了SpringAop中切面方法的信息,在切面方法中添加JoinPoint參數,就可以獲取到封裝了該方法信息的JoinPoint對象.?
常用api:

方法名功能
Signature getSignature();獲取封裝了署名信息的對象,在該對象中可以獲取到目標方法名,所屬類的Class等信息
Object[] getArgs();獲取傳入目標方法的參數對象
Object getTarget();獲取被代理的對象
Object getThis();獲取代理對象

ProceedingJoinPoint對象

ProceedingJoinPoint對象是JoinPoint的子接口,該對象只用在@Around的切面方法中,?
添加了?
Object proceed() throws Throwable //執行目標方法?
Object proceed(Object[] var1) throws Throwable //傳入的新的參數去執行目標方法?
兩個方法.

Demo

切面類

@Aspect
@Component
public class aopAspect {/*** 定義一個切入點表達式,用來確定哪些類需要代理* execution(* aopdemo.*.*(..))代表aopdemo包下所有類的所有方法都會被代理*/@Pointcut("execution(* aopdemo.*.*(..))")public void declareJoinPointerExpression() {}/*** 前置方法,在目標方法執行前執行* @param joinPoint 封裝了代理方法信息的對象,若用不到則可以忽略不寫*/@Before("declareJoinPointerExpression()")public void beforeMethod(JoinPoint joinPoint){System.out.println("目標方法名為:" + joinPoint.getSignature().getName());System.out.println("目標方法所屬類的簡單類名:" +        joinPoint.getSignature().getDeclaringType().getSimpleName());System.out.println("目標方法所屬類的類名:" + joinPoint.getSignature().getDeclaringTypeName());System.out.println("目標方法聲明類型:" + Modifier.toString(joinPoint.getSignature().getModifiers()));//獲取傳入目標方法的參數Object[] args = joinPoint.getArgs();for (int i = 0; i < args.length; i++) {System.out.println("第" + (i+1) + "個參數為:" + args[i]);}System.out.println("被代理的對象:" + joinPoint.getTarget());System.out.println("代理對象自己:" + joinPoint.getThis());}/*** 環繞方法,可自定義目標方法執行的時機* @param pjd JoinPoint的子接口,添加了*            Object proceed() throws Throwable 執行目標方法*            Object proceed(Object[] var1) throws Throwable 傳入的新的參數去執行目標方法*            兩個方法* @return 此方法需要返回值,返回值視為目標方法的返回值*/@Around("declareJoinPointerExpression()")public Object aroundMethod(ProceedingJoinPoint pjd){Object result = null;try {//前置通知System.out.println("目標方法執行前...");//執行目標方法//result = pjd.proeed();//用新的參數值執行目標方法result = pjd.proceed(new Object[]{"newSpring","newAop"});//返回通知System.out.println("目標方法返回結果后...");} catch (Throwable e) {//異常通知System.out.println("執行目標方法異常后...");throw new RuntimeException(e);}//后置通知System.out.println("目標方法執行后...");return result;}
}

被代理類

/*** 被代理對象*/
@Component
public class TargetClass {/*** 拼接兩個字符串*/public String joint(String str1, String str2) {return str1 + "+" + str2;}
}

測試類

public class TestAop {@Testpublic void testAOP() {//1、創建Spring的IOC的容器ApplicationContext ctx = new ClassPathXmlApplicationContext("classpath:bean.xml");//2、從IOC容器中獲取bean的實例TargetClass targetClass = (TargetClass) ctx.getBean("targetClass");//3、使用beanString result = targetClass.joint("spring","aop");System.out.println("result:" + result);}
}

輸出結果

目標方法執行前...
目標方法名為:joint
目標方法所屬類的簡單類名:TargetClass
目標方法所屬類的類名:aopdemo.TargetClass
目標方法聲明類型:public
第1個參數為:newSpring
第2個參數為:newAop
被代理的對象:aopdemo.TargetClass@4efc180e
代理對象自己:aopdemo.TargetClass@4efc180e
目標方法返回結果后...
目標方法執行后...
result:newSpring+newAop

參考文章:?
http://blog.csdn.net/ochangwen/article/details/52557724?
http://blog.csdn.net/a9529lty/article/details/7031070

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

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

相關文章

解決 No projects are available for deployment to this server!

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 如題&#xff0c;今天在嘗試部署從SVN上down下來的項目時&#xff0c;發現不能被tomcat識別成web項目&#xff01;原因是SVN上down下來的…

地大信工成果快報

在成果快報投稿中&#xff0c;請注意以下幾個問題&#xff1a;&#xff08;1&#xff09;成果信息一定要準確、全面&#xff0c;所有作者必須都要列出來&#xff0c;而不要出現et al. 這樣的表述&#xff0c;通訊作者一定要用*號標注&#xff1b;&#xff08;2&#xff09;成果…

javaBean的命名規則

前段時間&#xff0c;寫程序時&#xff0c;出了錯誤&#xff0c;竟然沒有想到是自己屬性命名的問題&#xff0c;哎~~~真是一定要注意規范呀&#xff0c;在這里我從網上找了些&#xff0c;規范作為參考 Sun 推薦的命名規范 1 &#xff0c;類名要首字母大寫&#xff0c;后面的單詞…

volatile的應用

volatile&#xff0c;中文意思是不穩定的、反復無常的&#xff0c;用來修飾變量&#xff0c;和多線程、并發有關系。 Java代碼在編譯后會變成Java字節碼&#xff0c;字節碼被類加載器加載到JVM里&#xff0c;JVM執行字節碼&#xff0c;最終需要轉化為匯編指令在CPU上執行。 在多…

漫談國內智能手機市場現狀

本文純屬一時興起&#xff0c;想到哪兒寫到哪兒&#xff0c;本人文筆也不咋地&#xff0c;寫的也比較隨意&#xff0c;如有錯誤歡迎指正&#xff0c;有啥意見歡迎交流。原創文章&#xff0c;轉載注明emouse的技術專欄。 我是一個不折不扣的數碼愛好者&#xff0c;對電腦手機這些…

【刷題】BZOJ 4195 [Noi2015]程序自動分析

Description 在實現程序自動分析的過程中,常常需要判定一些約束條件是否能被同時滿足。 考慮一個約束滿足問題的簡化版本&#xff1a;假設x1,x2,x3,…代表程序中出現的變量&#xff0c;給定n個形如xixj或xi≠xj的變量相等/不等的約束條件&#xff0c;請判定是否可以分別為每一個…

mysql 5.5 安裝配置方法圖文教程

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 回憶一下mysql 5.5 安裝配置方法&#xff0c;整理mysql 5.5 安裝配置教程筆記&#xff0c;分享給大家。 MySQL下載地址&#xff1a;htt…

git解除與遠程分支的關聯

在工作中&#xff0c;經常需要將同一份代碼傳到不同的git倉庫中去 如果本地同樣一份代碼&#xff0c;已經關聯了一個與遠程分支&#xff0c;那么怎么才能解除原程分支&#xff0c;并關聯到一個新的分支將代碼提交到新的分支上去呢&#xff1f; 1、如果你已經在遠程創建了一個分…

FindWindow用法

函數功能&#xff1a;該函數獲得一個頂層窗口的句柄&#xff0c;該窗口的類名和窗口名與給定的字符串相匹配。這個函數不查找子窗口。在查找時不區分大小寫。 函數型&#xff1a;HWND FindWindow&#xff08;LPCTSTR IpClassName&#xff0c;LPCTSTR IpWindowName&#xff0…

中國大城市政治地位綜合實力排名

中國大城市政治地位綜合實力排名&#xff01; 中國大城市政治地位綜合實力排名&#xff01;政治地位: 政治地位: 1&#xff08;直轄市 4 個&#xff09;&#xff1a;上海、北京、天津、重慶 2&#xff08;副省級城市 15 個&#xff09;&#xff1a;廣州、深圳、武漢、南京、沈陽…

sourcemap總結

sourcemap在線上壓縮文件調試中很重要&#xff0c;在此總結如下&#xff1a; 1. 開啟sourcemap (1). 瀏覽器要開啟source-map支持(2). 壓縮文件底部要有source-map的URL&#xff0c;壓縮要開啟source-map(3). .map文件要放在服務器&#xff0c;source-map URL指向的位置 2. sou…

navicat 導出的sql文件,再導入,運行SQL文件成功,數據庫中卻沒有表

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 問題描述&#xff1a;本來在數據庫上右鍵 &#xff0c;運行SQL文件 &#xff0c;就可以導入 sql ,建表成功&#xff0c;并且數據也該的…

mysql索引之二級索引學習總結

二級索引又稱輔助索引、非聚集索引(no-clustered index)。b&#xff0b;tree樹結構。然而二級索引的葉子節點不保存記錄中的所有列&#xff0c;其葉子節點保存的是<健值&#xff0c;(記錄)地址>。好似聚集索引中非葉子節點保存的信息&#xff0c;不同的是二級索引保存的是…

264,avs中Skip宏塊與Direct預測模式 ,對稱模式的區別

1. B_Skip類型宏塊 &#xff1a;無像素殘差&#xff0c;無運動矢量殘差&#xff08;MVD&#xff09;和參考幀。解碼時&#xff0c;通過Direct預測模式&#xff08;時間或空間&#xff09;計算出前、后向MV后&#xff0c;直接利用前、后向MV得到像素預測值。像 素重構值像…

【hdu 6444】Neko's loop

【鏈接】 我是鏈接,點我呀:) 【題意】 給你一個序列. 你可以選擇起點i。 然后每次往右跳k次。 得到下一個值a[ik];。 問你跳m次能得到的最大值ma是多少。 如果>s輸出0 否則輸出s-ma; 【題解】 最后肯定會形成gcd(n,k)個環的。 對于每個環(長度為cnt。 預處理出從1..2cnt的…

高性能MySQL之Count統計查詢

近一段時間&#xff0c;有同事問我 “MySQL執行count很慢&#xff0c;有沒有什么優化的空間”。當時在忙&#xff0c;就回復了一句“innodb里面count統計都是實時統計&#xff0c;慢一些是正常的”&#xff0c; 周末閑暇下來&#xff0c;想到以前有好多人都問過關于count的問題…

js轉換字符串為base64位

在window對象下有兩個api,可以對ASCII編碼進行編譯,得到base64位的字符串 btoa:編碼為base64atob:解碼為ASCII碼此種方法不能對中文進行操作,因為ASCII碼中沒有中文,如果編碼會得到亂碼 要編碼中文可以先用encodeURIComponent() 對字符串進行轉義,轉義后再btoa()成base64就可以…

java 文件下載,中文表名,中文內容

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 RequestMapping("userDownloadTemplet")private void userDownloadTemplet(HttpServletRequest request,HttpServletResponse …

cherry-pick的用法

簡述 git cherry-pick可以選擇某一個分支中的一個或幾個commit(s)來進行操作。例如&#xff0c;假設我們有個穩定版本的分支&#xff0c;叫v2.0&#xff0c;另外還有個開發版本的分支v3.0&#xff0c;我們不能直接把兩個分支合并&#xff0c;這樣會導致穩定版本混亂&#xff0c…

Docker 二進制安裝docker

https://blog.csdn.net/bruce_yds/article/details/80035714轉載于:https://www.cnblogs.com/Presley-lpc/p/9698724.html