久久综合九色综合97婷婷-美女视频黄频a免费-精品日本一区二区三区在线观看-日韩中文无码有码免费视频-亚洲中文字幕无码专区-扒开双腿疯狂进出爽爽爽动态照片-国产乱理伦片在线观看夜-高清极品美女毛茸茸-欧美寡妇性猛交XXX-国产亚洲精品99在线播放-日韩美女毛片又爽又大毛片,99久久久无码国产精品9,国产成a人片在线观看视频下载,欧美疯狂xxxx吞精视频

有趣生活

當前位置:首頁>職場>spring的aop代理是干嘛的(阿里面試官什么是AOP)

spring的aop代理是干嘛的(阿里面試官什么是AOP)

發布時間:2024-01-24閱讀(15)

導讀AOP(AspectOrientProgramming),它是面向對象編程的一種補充,主要應用于處理一些具有橫切性質的系統級服務,如日志收集、事務管理、安全....

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

spring的aop代理是干嘛的(阿里面試官什么是AOP)(1)

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/,目前…

引用官網描述:

  • a seamless aspect-oriented extension to the Javatm programming language(一種基于Java平臺的面向切面編程的語言)
  • Java platform compatible(兼容Java平臺,可以無縫擴展)
  • easy to learn and use(易學易用)

可以單獨使用,也可以整合到其它框架中。

單獨使用AspectJ時需要使用專門的編譯器ajc。

java的編譯器是javac,AspectJ的編譯器是ajc,aj是首字母縮寫,c即compiler。

AspectJ和Spring AOP的區別?

相信作為Java開發者我們都很熟悉Spring這個框架,在spring框架中有一個主要的功能就是AOP,提到AOP就往往會想到AspectJ,下面我對AspectJ和Spring AOP作一個簡單的比較:

Spring AOP

1、基于動態代理來實現,默認如果使用接口的,用JDK提供的動態代理實現,如果是方法則使用CGLIB實現

2、Spring AOP需要依賴IOC容器來管理,并且只能作用于Spring容器,使用純Java代碼實現

3、在性能上,由于Spring AOP是基于動態代理來實現的,在容器啟動時需要生成代理實例,在方法調用上也會增加棧的深度,使得Spring AOP的性能不如AspectJ的那么好

AspectJ
  • AspectJ來自于Eclipse基金會
  • 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。

  • AspectJ可以做Spring AOP干不了的事情,它是AOP編程的完全解決方案,Spring AOP則致力于解決企業級開發中最普遍的AOP(方法織入)。而不是成為像AspectJ一樣的AOP方案
  • 因為AspectJ在實際運行之前就完成了織入,所以說它生成的類是沒有額外運行時開銷的
對比總結

下表總結了 Spring AOP 和 AspectJ 之間的關鍵區別:

spring的aop代理是干嘛的(阿里面試官什么是AOP)(2)

TAGS標簽:  spring  代理  干嘛  阿里  面試  spring的aop

歡迎分享轉載→http://m.avcorse.com/read-220130.html

Copyright ? 2024 有趣生活 All Rights Reserve吉ICP備19000289號-5 TXT地圖HTML地圖XML地圖