了解代理應(yīng)該學(xué)習(xí)的——面向切面編程AspectJ

      網(wǎng)友投稿 975 2022-05-30

      問題起源

      學(xué)習(xí)了Java的代理,動態(tài)代理,cglib的小伙伴對Java的代理中的一些概念應(yīng)該會有一些基礎(chǔ)的認(rèn)識,比如如何使用代理實現(xiàn)一個-,如果通過cglib的回調(diào)過濾器來修改方法的執(zhí)行邏輯等等,那么這種實現(xiàn)方式是否可以抽象為更高級的編程思想呢?使用cglib創(chuàng)建對象的過程與代碼很繁瑣,是否有更便捷的開源包可以使用呢?

      AOP

      了解完代理后應(yīng)該學(xué)習(xí)的——面向切面編程AspectJ

      AOP:面向切面編程,其思想是:

      通過預(yù)編譯方式和運(yùn)行期動態(tài)代理方式,實現(xiàn)在不修改源代碼的情況下給程序動態(tài)統(tǒng)一添加額外功能的一種技術(shù)

      我們今天要學(xué)習(xí)的AspectJ就是AOP思想的一個工具包,定義了AOP語法與基本概念。

      AspectJ的一些基本概念

      連接點:JoinPoint:

      切入點:PointCut;

      通知:Advice;

      切面:Aspect。

      其官方文檔釋義如下:

      A join point is a well-defined point in the program flow. A pointcut picks out certain join points and values at those points. A piece of advice is code that is executed when a join point is reached. These are the dynamic parts of AspectJ.

      其含義如下圖所示:

      從實踐中學(xué)習(xí)

      讓我們從實際代碼觸發(fā)來理解這幾個概念。

      maven引入

      使用aspectj需要我們引入以下兩個maven包:

      org.aspectj aspectjrt 1.9.9.1 runtime org.aspectj aspectjweaver 1.9.9.1

      第一個aspectjrt是aspectj運(yùn)行時需要的庫(Runtime Library),第二個aspectjweaver,支持切入點表達(dá)式,用于在加載Java類時起作用。

      簡單使用

      (在學(xué)習(xí)的過程中,有個東西始終讓我無法習(xí)慣,就是在java中引入.aj文件)

      需要習(xí)慣這一點,在非spring項目中,使用aspectj可能需要修改maven文件與創(chuàng)建非.java文件。不過,現(xiàn)在的編譯器可以幫助我們習(xí)慣這一點,maven引入aspectj之后,IDEA便有了創(chuàng)建aspectj文件的選項:

      最開始,我們有以下類:

      package com.qw.real.aop; public class Person { /** * 讀書 * @return */ public boolean readBook(String book) { System.out.println("正在讀" + book); return true; } }

      然后創(chuàng)建aspectj文件:

      public aspect AjAspect { pointcut say(): execution(* App.say(..)); before(): say() { System.out.println("AjAspect before say"); } after(): say() { System.out.println("AjAspect after say"); } }

      配置aspectj進(jìn)行編譯執(zhí)行

      使用aspectj與其他java程序最大的不同是,需要特殊編譯環(huán)境,我們以idea為例,除需要在maven中引入之前的兩個aspectj運(yùn)行環(huán)境,還需要引入一個aspectj編譯器:

      org.aspectj aspectjtools 1.9.9.1

      我們配置Java Compiler,測試:

      這個錯誤似乎是在說我們的編譯環(huán)境與運(yùn)行環(huán)境所使用的版本不一致:編譯用version 55,而運(yùn)行使用的是 version 52,猜測可能是因為我們使用的最新的aspect包,為此,降低aspectj版本到1.8.3再次嘗試:

      測試成功!

      然后我們?nèi)?zhí)行:

      before... 正在讀古文觀止 after...

      總結(jié)

      總的來看,aspectj非常強(qiáng)大,但是其需要特殊配置編譯環(huán)境這一點可能不太能被人接受。

      Java Maven

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。

      上一篇:Google Earth Engine(GEE)——R 語言圖像概覽
      下一篇:Redis認(rèn)識與安裝
      相關(guān)文章
      亚洲免费二区三区| 亚洲一卡2卡三卡4卡无卡下载| 亚洲自偷自拍另类图片二区| 亚洲国产精品无码专区影院| 亚洲视频一区二区| 亚洲av高清在线观看一区二区| 亚洲av色香蕉一区二区三区蜜桃| 亚洲精品9999久久久久无码| 亚洲国产精品网站在线播放| 亚洲国产精品18久久久久久| 亚洲AV永久无码精品放毛片| 久久久久久亚洲精品无码| 国产亚洲高清在线精品不卡| www.91亚洲| 中文字幕亚洲不卡在线亚瑟| 亚洲色欲一区二区三区在线观看| 亚洲色欲一区二区三区在线观看| 亚洲大尺度无码无码专区| 久久久久亚洲精品成人网小说| 老汉色老汉首页a亚洲| 久久av无码专区亚洲av桃花岛| 中文字幕亚洲色图| 亚洲人成影院在线高清| 亚洲人成www在线播放| 亚洲第一综合天堂另类专| 国产亚洲视频在线观看| 中文字幕精品无码亚洲字| 国产亚洲色婷婷久久99精品| 亚洲国产精品国自产电影| 亚洲欧洲精品一区二区三区| 精品亚洲成A人无码成A在线观看| 亚洲熟女精品中文字幕| 美国毛片亚洲社区在线观看 | 亚洲网红精品大秀在线观看| 亚洲电影在线播放| 亚洲一区AV无码少妇电影| 五月天婷亚洲天综合网精品偷| 中文字幕在线亚洲精品| 久久久久亚洲Av片无码v| 亚洲精品视频在线观看免费| 国产成人亚洲综合一区|