您好,登錄后才能下訂單哦!
本篇內(nèi)容主要講解“如何正確使用Aspect 的.aj 類”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“如何正確使用Aspect 的.aj 類”吧!
一、前言
二、滿腦子都是騷操作
1. 遇到問(wèn)題
2. 發(fā)現(xiàn)問(wèn)題
3. 排查問(wèn)題
三、如何正確使用 Aspect 的 .aj 類
1. 安裝 AspectJ
2. AspectJ 插件
3. 添加依賴 aspectjrt.jar
4. 配置AspectJ編譯器
5. 案例測(cè)試
說(shuō)來(lái)也是奇怪,只要是學(xué)編程的,從初次接觸的 Java 到安裝 JDK、IDEA、MYSQL, 再到接觸 Spring、MyBatis、RPC、MQ,哪怕有時(shí)候在淺的坑也會(huì)跳進(jìn)去嘗嘗鮮,一遍抓著頭發(fā),一手點(diǎn)著鼠標(biāo)也幾乎是你的常態(tài)。你的鍵盤里總是有很多被抓碎的頭發(fā)!
上周,謝飛機(jī)(化名)發(fā)過(guò)來(lái)了自己的手?jǐn)]的中間件源碼,說(shuō)這代碼都沒(méi)有啥怎么就不能切面呢?
看了幾遍源碼沒(méi)發(fā)現(xiàn)問(wèn)題,開始調(diào)試,還真它哈拉哨的不進(jìn)這個(gè)切面,接下來(lái);
DoJoinPoint
拷貝過(guò)來(lái)粘貼進(jìn)去,噗察一下貼進(jìn)去了,沒(méi)提示替換,雖然有報(bào)錯(cuò)但兩個(gè)類能共存,如下:
DoJoinPoint
不是一個(gè)正經(jīng) Java 類,路徑不對(duì)?有看不見的特殊字符?要不是IDEA把 .aj
這貨顯示成 C 類的圖標(biāo),可能早就發(fā)現(xiàn)問(wèn)題了。緊接著把這錯(cuò)誤類的截圖發(fā)給了謝飛機(jī),問(wèn)它你是怎么創(chuàng)建的?他說(shuō)實(shí)話了
DoJoinPoint
時(shí),看到一個(gè) Aspect 的選項(xiàng),以為這個(gè)就是創(chuàng)建切面的快捷操作,如圖;
.aj
結(jié)尾的類,并不是一個(gè)正經(jīng)的 Java 類,所以切面不到,也根本沒(méi)有對(duì)應(yīng)的 class 文件
。AspectJ,簡(jiǎn)稱 AJ 我自己說(shuō)的
AspectJ 其實(shí)也是 AOP 的一種實(shí)現(xiàn)技術(shù),功能類似于攔截器,在集成在 IntelliJ IDEA 開發(fā)工具里。在使用 IntelliJ IDEA 編寫 AspectJ 代碼之前需要本機(jī)先安裝 AspectJ 工具包。否則你的 .aj 類不能運(yùn)行,同時(shí)IDEA類顯示出來(lái)的 .aj 類,也是C的標(biāo)識(shí)
接下來(lái)我們就來(lái)聊聊關(guān)于這個(gè)東西怎么使用,別再被 .aj 騙了。
在使用 AspectJ 之前,需要去官網(wǎng)下載一個(gè)安裝包,地址:https://www.eclipse.org/aspectj/downloads.php 如果官網(wǎng)下載的很慢,可以從我提供的源碼中獲取,也可以從其他途徑搜索下載 aspectj-1.9.4.jar
下載完成安裝;
java -jar aspectj-1.9.4.jar
C:\aspectj1.9
,包括:bin、doc、lib等,后面我們就會(huì)使用到這些內(nèi)容。在專業(yè)版 IDEA 中開發(fā) AspectJ,需要安裝以下兩個(gè)插件:
開始之前需要在項(xiàng)目中添加 aspectjrt.jar
依賴,aspectjrt.jar
即 AspectJ 安裝目錄中lib
目錄下的jar包。你可以復(fù)制到工程中引入,也可以直接引入
Project Structure
IDEA 默認(rèn)使用 javac
編譯器,這里需要配置 AspectJ 的編譯器 ajc
,在 IDEA 中做相應(yīng)配置。
C:\aspectj1.9\lib\aspectjtools.jar
創(chuàng)建 Aspect 類
public aspect DoAspect {
pointcut logPointcut():call(* ApiTest.hi(..));
void around():call(void ApiTest.hi(..)){
System.out.println("call 開始...");
proceed();
System.out.println("call 結(jié)束...");
}
before(): logPointcut(){
System.out.println("方法執(zhí)行 before");
}
after(): logPointcut(){
System.out.println("方法執(zhí)行 after");
}
}
測(cè)試類
public class ApiTest {
public void hi(){
System.out.println("Hi Aspect");
}
public static void main(String[] args) {
ApiTest apiTest = new ApiTest();
apiTest.hi();
}
}
測(cè)試結(jié)果
call 開始...
方法執(zhí)行 before
Hi Aspect
call 結(jié)束...
方法執(zhí)行 after
Process finished with exit code 0
到此,相信大家對(duì)“如何正確使用Aspect 的.aj 類”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。