掃二維碼與項目經(jīng)理溝通
我們在微信上24小時期待你的聲音
解答本文疑問/技術(shù)咨詢/運(yùn)營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流
本文轉(zhuǎn)載自微信公眾號「bugstack蟲洞?!?,作者小傅哥 。轉(zhuǎn)載本文請聯(lián)系bugstack蟲洞棧公眾號。

成都創(chuàng)新互聯(lián)公司專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于網(wǎng)站制作、成都網(wǎng)站建設(shè)、海南州網(wǎng)絡(luò)推廣、小程序定制開發(fā)、海南州網(wǎng)絡(luò)營銷、海南州企業(yè)策劃、海南州品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營等,從售前售中售后,我們都將竭誠為您服務(wù),您的肯定,是我們最大的嘉獎;成都創(chuàng)新互聯(lián)公司為所有大學(xué)生創(chuàng)業(yè)者提供海南州建站搭建服務(wù),24小時服務(wù)熱線:18980820575,官方網(wǎng)址:www.cdcxhl.com
目錄
一、前言
話我放這,踩過的坑越多頭發(fā)越少!
說來也是奇怪,只要是學(xué)編程的,從初次接觸的 Java 到安裝 JDK、IDEA、MYSQL, 再到接觸 Spring、MyBatis、RPC、MQ,哪怕有時候在淺的坑也會跳進(jìn)去嘗嘗鮮,一遍抓著頭發(fā),一手點(diǎn)著鼠標(biāo)也幾乎是你的常態(tài)。你的鍵盤里總是有很多被抓碎的頭發(fā)!
但,哪怕是抓了這么頭發(fā),還是遇到了一個滿腦子都是騷操作的小伙。傅哥,我的切面怎么攔截不到?我是照著你的《SpringBoot 中間件設(shè)計和開發(fā)》專欄寫的,你給我看看吧,我都弄了一天了
接下來我?guī)е蠹乙黄鹂纯词裁词强鞓沸乔?,他是怎么一頓騷操作讓切面攔截不到的!
二、滿腦子都是騷操作
1. 遇到問題
上周,謝飛機(jī)(化名)發(fā)過來了自己的手?jǐn)]的中間件源碼,說這代碼都沒有啥怎么就不能切面呢?
2. 發(fā)現(xiàn)問題
看了幾遍源碼沒發(fā)現(xiàn)問題,開始調(diào)試,還真它哈拉哨的不進(jìn)這個切面,接下來;
3. 排查問題
要不是IDEA把 .aj 這貨顯示成 C 類的圖標(biāo),可能早就發(fā)現(xiàn)問題了。緊接著把這錯誤類的截圖發(fā)給了謝飛機(jī),問它你是怎么創(chuàng)建的?他說實(shí)話了
三、如何正確使用 Aspect 的 .aj 類
AspectJ,簡稱 AJ 我自己說的
AspectJ 其實(shí)也是 AOP 的一種實(shí)現(xiàn)技術(shù),功能類似于攔截器,在集成在 IntelliJ IDEA 開發(fā)工具里。在使用 IntelliJ IDEA 編寫 AspectJ 代碼之前需要本機(jī)先安裝 AspectJ 工具包。否則你的 .aj 類不能運(yùn)行,同時IDEA類顯示出來的 .aj 類,也是C的標(biāo)識
接下來我們就來聊聊關(guān)于這個東西怎么使用,別再被 .aj 騙了。
1. 安裝 AspectJ
在使用 AspectJ 之前,需要去官網(wǎng)下載一個安裝包,地址:https://www.eclipse.org/aspectj/downloads.php 如果官網(wǎng)下載的很慢,可以從我提供的源碼中獲取,也可以從其他途徑搜索下載 aspectj-1.9.4.jar
下載完成安裝;
默認(rèn)配置安裝完成以后會在C盤創(chuàng)建出一個文件夾 C:\aspectj1.9,包括:bin、doc、lib等,后面我們就會使用到這些內(nèi)容。
2. AspectJ 插件
在專業(yè)版 IDEA 中開發(fā) AspectJ,需要安裝以下兩個插件:
3. 添加依賴 aspectjrt.jar
開始之前需要在項目中添加 aspectjrt.jar 依賴,aspectjrt.jar 即 AspectJ 安裝目錄中l(wèi)ib目錄下的jar包。你可以復(fù)制到工程中引入,也可以直接引入
在工程上鼠標(biāo)右鍵,點(diǎn)擊 Open Module Setting 打開 Project Structure
點(diǎn)擊 Libraries 選項卡,和上面的 + 號,創(chuàng)建 New Project Library
選擇 C:\aspectj1.9\lib\aspectjrt.jar 路徑,點(diǎn)擊即可配置完成
4. 配置AspectJ編譯器
IDEA 默認(rèn)使用 javac 編譯器,這里需要配置 AspectJ 的編譯器 ajc,在 IDEA 中做相應(yīng)配置。
5. 案例測試
創(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");
- }
- }
測試類
- public class ApiTest {
- public void hi(){
- System.out.println("Hi Aspect");
- }
- public static void main(String[] args) {
- ApiTest apiTest = new ApiTest();
- apiTest.hi();
- }
- }
測試結(jié)果
- call 開始...
- 方法執(zhí)行 before
- Hi Aspect
- call 結(jié)束...
- 方法執(zhí)行 after
- Process finished with exit code 0
到這,才是一個關(guān)于 Aspect 類的正確打開方式,關(guān)于 Aspect 的使用也可以嘗試搞搞,此篇還只是關(guān)于此類切面寫法的一個入門。
四、總結(jié)
你的代碼越粗獷、越豪放、越騷氣,幾乎你遇到的問題也是越多的,可能就是因為沒有遵守一定的研發(fā)執(zhí)行規(guī)范,所以遇到的這些有點(diǎn)傻的問題,幾乎會浪費(fèi)掉你一個上午或者一天。
但有些時候如果你能認(rèn)真對待你弄出來的bug,深入分析下它是如何產(chǎn)生的,并把它復(fù)現(xiàn)出來一點(diǎn)點(diǎn)深入研究下,可能也會得到意想不到的收獲,也說不定。所以凡是認(rèn)真,凡事沒有壞事。
關(guān)于切面、關(guān)于源碼、關(guān)于開發(fā),可能并不應(yīng)該只注重于功能實(shí)現(xiàn),甚至有時候要想辦法逃離日復(fù)一日沒有成長的工作內(nèi)容。多在那些有價值的技術(shù)上下功夫,那你的收獲也是最多的。

我們在微信上24小時期待你的聲音
解答本文疑問/技術(shù)咨詢/運(yùn)營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流