發布時間:2024-01-24閱讀(15)
AOP(Aspect Orient Programming),它是面向對象編程的一種補充,主要應用于處理一些具有橫切性質的系統級服務,如日志收集、事務管理、安全檢查、緩存、對象池管理等。

AOP實現的關鍵就在于AOP框架自動創建的AOP代理,AOP代理則可分為靜態代理和動態代理兩大類,其中靜態代理是指使用AOP框架提供的命令進行編譯,從而在編譯階段就可生成 AOP 代理類,因此也稱為編譯時增強;而動態代理則在運行時借助于JDK動態代理、CGLIB等在內存中“臨時”生成AOP動態代理類,因此也被稱為運行時增強。
面向切面的編程(AOP) 是一種編程范式,旨在通過允許橫切關注點的分離,提高模塊化。AOP提供切面來將跨越對象關注點模塊化。
AOP要實現的是在我們寫的代碼的基礎上進行一定的包裝,如在方法執行前、或執行后、或是在執行中出現異常后這些地方進行攔截處理或叫做增強處理
Aop的概念Pointcut:是一個(組)基于正則表達式的表達式,有點繞,就是說他本身是一個表達式,但是他是基于正則語法的。通常一個pointcut,會選取程序中的某些我們感興趣的執行點,或者說是程序執行點的集合。
JoinPoint:通過pointcut選取出來的集合中的具體的一個執行點,我們就叫JoinPoint.
Advice:在選取出來的JoinPoint上要執行的操作、邏輯。關于5種類型,我不多說,不懂的同學自己補基礎。
Aspect:就是我們關注點的模塊化。這個關注點可能會橫切多個對象和模塊,事務管理是橫切關注點的很好的例子。它是一個抽象的概念,從軟件的角度來說是指在應用程序不同模塊中的某一個領域或方面。又pointcut 和advice組成。
Weaving:把切面應用到目標對象來創建新的 advised 對象的過程。
AspectJ是什么?能做什么?AspectJ是一個易用的功能強大的AOP框架
AspectJ全稱是Eclipse AspectJ, 其官網地址是:www.eclipse.org/aspectj/,目前…
引用官網描述:
可以單獨使用,也可以整合到其它框架中。
單獨使用AspectJ時需要使用專門的編譯器ajc。
java的編譯器是javac,AspectJ的編譯器是ajc,aj是首字母縮寫,c即compiler。
AspectJ和Spring AOP的區別?相信作為Java開發者我們都很熟悉Spring這個框架,在spring框架中有一個主要的功能就是AOP,提到AOP就往往會想到AspectJ,下面我對AspectJ和Spring AOP作一個簡單的比較:
Spring AOP1、基于動態代理來實現,默認如果使用接口的,用JDK提供的動態代理實現,如果是方法則使用CGLIB實現
2、Spring AOP需要依賴IOC容器來管理,并且只能作用于Spring容器,使用純Java代碼實現
3、在性能上,由于Spring AOP是基于動態代理來實現的,在容器啟動時需要生成代理實例,在方法調用上也會增加棧的深度,使得Spring AOP的性能不如AspectJ的那么好
AspectJ? 1、編譯期織入(Compile-time weaving): 如類 A 使用 AspectJ 添加了一個屬性,類 B 引用了它,這個場景就需要編譯期的時候就進行織入,否則沒法編譯類 B。
? 2、編譯后織入(Post-compile weaving): 也就是已經生成了 .class 文件,或已經打成 jar 包了,這種情況我們需要增強處理的話,就要用到編譯后織入。
? 3、類加載后織入(Load-time weaving): 指的是在加載類的時候進行織入,要實現這個時期的織入,有幾種常見的方法。1、自定義類加載器來干這個,這個應該是最容易想到的辦法,在被織入類加載到 JVM 前去對它進行加載,這樣就可以在加載的時候定義行為了。2、在 JVM 啟動的時候指定 AspectJ 提供的 agent:-javaagent:xxx/xxx/aspectjweaver.jar。
下表總結了 Spring AOP 和 AspectJ 之間的關鍵區別:

歡迎分享轉載→http://m.avcorse.com/read-220130.html
Copyright ? 2024 有趣生活 All Rights Reserve吉ICP備19000289號-5 TXT地圖HTML地圖XML地圖