概念:訪問目標方法即用jointpoint(@around用poceedingjointpoint)
1.獲取他們的目標對象信息,如test.component@80387a這種,
2.還有獲取帶參方法的參數,如[Ljava.lang.Object;@183cfe9(想當然我們也可以用對象的arrays.toString()方法將其還原)
3.另外還有獲取被增強的方法相關信息 如String test.component.test1(String)這種
總結:訪問目標方法參數,有三種方法(實際有四種,先說三種)
- 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(); 獲取這些元素可以進行修改或者觀察自己代碼是否有異樣.