springAOP中用joinpoint獲取切入點方法的參數


概念:訪問目標方法即用jointpoint(@around用poceedingjointpoint)

1.獲取他們的目標對象信息,如test.component@80387a這種,

2.還有獲取帶參方法的參數,如[Ljava.lang.Object;@183cfe9(想當然我們也可以用對象的arrays.toString()方法將其還原)

3.另外還有獲取被增強的方法相關信息 如String test.component.test1(String)這種

總結:訪問目標方法參數,有三種方法(實際有四種,先說三種)

  1. joinpoint.getargs():獲取帶參方法的參數

:就是獲取組件中test方法中的參數,如果test方法中有多個參數,那么這個方法機會返回多個參數.想要哪個就通過for循環加上判斷來篩選

2.joinpoint.getTarget():.獲取他們的目標對象信息

3..joinpoint.getSignature():(signature是信號,標識的意思):獲取被增強的方法相關信息.其后續方法有兩個

getDeclaringTypeName: 返回方法所在的包名和類名

getname()                     : 返回方法名

 

看不懂,請看代碼!

組件類
@Component
public class component {
    
    public void test() {
        
    }
    public void test1(String name2) {
        
    }
}

 

我以@afterreturning為例解說

我們先看3 Signature方法

@AfterReturning(value="execution(* test.*.*(..))",returning="name2")
    private void test1(JoinPoint jp ,String name2) {

                       System.out.println(jp.getSignature());

                       System.out.println(jp.getSignature().getName());
                System.out.println(jp.getSignature().getDeclaringTypeName());

}

Signature方法下的輸出結果

 

你看,

getSignature());是獲取到這樣的信息  :修飾符包名+組件名(類名) +方法名

getSignature().getName());                    :方法名

getSignature().getDeclaringTypeName()): 包名+組件名(類名)

我們再看1   getargs()

       System.out.println(jp.getArgs());
       System.out.println(Arrays.toString(jp.getArgs()));

 

結果輸出

 

         jp.getArgs()  :我們會得到一個  看不懂一組數組對象,但是我們知道這是一個對象,參數對象       
        Arrays.toString(jp.getArgs())     但是我們可以用Arrays類中數組轉字符串方法:arrays.tostring(返回指定數組內容以字符串表示出來)  就可以得到具體數字了

 

3.getTarget()方法:該方法返回被織入增強處理的目標對象.(這個和getthis()方法很相似 但是的出來的值不相等)

System.out.println(jp.getTarget());

輸出結果

 

 

是一個實實在在的對象,既不是參數也不是相關信息

 

總結:

以上就是訪問目標方法的參數的所有方法(除了getthis()沒有說其實也是返回一個對象生成的代理對象    得出的對象與gettarget()方法很相似幾乎可以說是一模一樣的,但是我用過.eqauls和==都不相等)這些方法,讓我想起了 document(dom)編程的獲取元素docuemnt.getelementbyid();  獲取這些元素可以進行修改或者觀察自己代碼是否有異樣.

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM