Aspectj中call與execution區別,織入程式碼位置不同
call 呼叫通知的環境是方法呼叫位置;而execution是方法執行位置,也就是方法簽名處。
具體結合一個示例可以更簡單跟容易理解:
1、pointcut配置:
pointcut callPointCut():execution(public void com.javartisan.aspectj1.HelloWorld.say(String));
此時是執行環境,檢視一下被織入切面之後的位元組碼:
// // Source code recreated from a .class file by IntelliJ IDEA // (powered by Fernflower decompiler) // package com.javartisan.aspectj; import com.javartisan.aspectj.HelloWorldAspect; public class HelloWorld { public HelloWorld() { } public void say() { try { HelloWorldAspect.aspectOf().ajc$before$com_javartisan_aspectj_HelloWorldAspect$1$88992c11(); System.out.println("Hello World!"); } catch (Throwable var2) { HelloWorldAspect.aspectOf().ajc$after$com_javartisan_aspectj_HelloWorldAspect$2$88992c11(); throw var2; } HelloWorldAspect.aspectOf().ajc$after$com_javartisan_aspectj_HelloWorldAspect$2$88992c11(); } public static void main(String[] args) { (new HelloWorld()).say(); } }
2、pointcut配置
pointcut callPointCut(String name, int age):call(public void com.javartisan.aspectj2.HelloWorld.say(String,int))&&args(name,age);
織入切面的位元組碼如下:
// // Source code recreated from a .class file by IntelliJ IDEA // (powered by Fernflower decompiler) // package com.javartisan.aspectj; import com.javartisan.aspectj.HelloWorldAspect; public class HelloWorld { public HelloWorld() { } public void say() { System.out.println("Hello World!"); } public static void main(String[] args) { HelloWorld var10000 = new HelloWorld(); try { HelloWorldAspect.aspectOf().ajc$before$com_javartisan_aspectj_HelloWorldAspect$1$88992c11(); var10000.say(); } catch (Throwable var2) { HelloWorldAspect.aspectOf().ajc$after$com_javartisan_aspectj_HelloWorldAspect$2$88992c11(); throw var2; } HelloWorldAspect.aspectOf().ajc$after$com_javartisan_aspectj_HelloWorldAspect$2$88992c11(); } }
對比1與2可以知曉:
call是在呼叫處進行織入通知程式碼,而對於execution是在連線點方法內部織入通知程式碼。
相關推薦
Aspectj中call與execution區別,織入程式碼位置不同
call 呼叫通知的環境是方法呼叫位置;而execution是方法執行位置,也就是方法簽名處。 具體結合一個示例可以更簡單跟容易理解: 1、pointcut配置: pointcut callPointCut():execution(public
字串處理中sizeof與strlen區別,以及末尾的\0
char *ch = "wonima aisaoziaaa"; int n = sizeof(ch); // 指標長度,對於64平臺來說,值為8 int nn = sizeof(*ch); // 一個字元的長度,值為1 int nnn = strlen(ch); //
Java中&與&&的區別,|與||的區別
這個是轉載別人的 個人感覺不錯, 在java中,很多人都不知道&與&&,|與||的區別。 &,&&:(與,短路與):一樣的地方就是二者執行最後的結果是一樣的,但是執行的過程有區別, 對於&:無論&左邊是
關於EL表示式中requestScope和param區別,el表示式與jstl標籤
今天演示EL表示式的時候發現自己jsp的基礎實在是薄弱,在這個很簡單的問題上迷惑了很久。 首先在看遇到的問題: 在瀏覽器地址輸入,表示傳入一個引數test,值為123 http://localhost:8888/Test/index.jsp?test=123 在in
C#中out與ref區別
erro 變量 但是 color 賦值 運行 網上 ann amp 一、ref(參考)與out區別 1、out(只出不進) 將方法中的參數傳遞出去,在方法中將該參數傳遞出去之前需要在該方法起始賦初值;在方法外傳遞的該參數可以不用賦值; 簡單理解就是:將一個東西拋出去之前必須
iOS中xib與storyboard原理,與Android界面布局的異同
ast int mvc color ron rect sdn -m control 用文本標記語言來進行布局,用的最多的應該是HTML語言。HTML能夠理解為有一組特殊標記的XML語言。 一、iOS中xib與storyboard顯示原理 在iOS中基
javascript中call apply的區別
控制臺 pre asc child tex func highlight java 屬性和方法 obj.call(thisObj, arg1, arg2, ...); obj.apply(thisObj, [arg1, arg2, ...]); 兩者作用一致,都是
js中decodeURI()和encodeURI()區別,decodeURIComponent和encodeURIComponent區別
nbsp sch www 問題 encode 替換 副本 字符替換 序列 decodeURI()定義和用法:decodeURI()函數可對encodeURI()函數編碼過的URI進行解碼.語法:decodeURI(URIstring)參數描述:URIstring必需,一個字
jQuery中position()與offset()區別
元素 page mini alert span 文檔 back www. class jQuery中position()與offset()區別 position()獲取相對於它最近的具有相對位置(position:relative或position:absolute)
dos命令中rem 與::的區別
dos命令 一行 .html 等等 nbsp article 字符 log 註釋 參考: http://www.cnblogs.com/followyourdream/articles/3445862.html rem *** 是一條命令, 占一行 : **
[轉]MyBatis中resultType與resultMap區別
作用 進一步 sel 存在 其中 對象 直接 model ati MyBatis中關於resultType和resultMap的具體區別如下: MyBatis中在查詢進行select映射的時候,返回類型可以用resultType,也可以用resultMap。resultTy
struts2中 ServletActionContext與ActionContext區別
copy 實現 沒有 action ins page comm 獲得 有一點 1. ActionContext 在Struts2開發中,除了將請求參數自動設置到Action的字段中,我們往往也需要在Action裏直接獲取請求(Request)或會話(Session)的一些信
MySQL中MyISAM與InnoDB區別及選擇,mysql添加外鍵
title 必須 pan 就會 默認 簡化 平臺 兩種 myisam InnoDB:支持事務處理等不加鎖讀取支持外鍵支持行鎖不支持FULLTEXT類型的索引不保存表的具體行數,掃描表來計算有多少行DELETE 表時,是一行一行的刪除InnoDB 把數據和索引存放在表空間裏面
ajax請求中contentType與dataType區別
服務器 ajax 字符串 解析 div script http 使用 自動 contentType: 告訴服務器,我要發什麽類型的數據,默認值: "application/x-www-form-urlencoded"。 dataType:告訴服務器,我要想什麽類型的數據。如
python中break與continue區別
print 方法 其中 dom 我們 spa strong bre 語法 1.在其他語言中break與continue也被經常使用到,其中用法稍微有些去別,下面我們使用python的語法結構來看看是否和在其他語言中的使用方法一致。 continue:是跳出本次循環,進入到下
java中a++與++a區別
demo div main highlight print class 結果 public 別了 java中a++與++a區別 a++與++a的區別,如果單獨使用沒有任何區別,如果在運算中就有區別了,a++是先運算在賦值,而++a是先賦值在運算!! class dem
Python中的 // 與 / 的區別
區別 best 浮點數 b- eui 精確 2.x 大於 ext 通常C/C++中,"/ " 算術運算符的計算結果是根據參與運算的兩邊的數據決定的,比如: 6 / 3 = 2 ; 6,3都是整數,那麽結果也就是整數2; 6.0 / 3.0 = 2.0 ; 6.0,3.0
MySQL中MyISAM與InnoDB區別及選擇
重建 包含 好的 數據 mysql 備份 處理 表空間 種類 InnoDB:支持事務處理等不加鎖讀取支持外鍵支持行鎖不支持FULLTEXT類型的索引不保存表的具體行數,掃描表來計算有多少行DELETE 表時,是一行一行的刪除InnoDB 把數據和索引存放在表空間裏面跨平臺可
VUE 中data與methods區別
報錯 data back color 數據 con 全部 ack ken ``` let vm=new Vue({ //根實例 el:‘#app‘, data:{//都是數據 }, methods:{ // methods 和data中的數據會全部放到vm上,而且名字不
WPF中Auto與*的區別
p s ren con 分配 log enter vertical net back 原文:WPF中Auto與*的區別 Auto 表示自動適應顯示內容的寬度, 如自動適應文本的