日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

AspectJ 实现代理

發布時間:2023/12/20 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 AspectJ 实现代理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

《兩種動態代理:JDK實現和CGLIB字節碼生成文件》

《java中的代理(靜態代理和動態代理)》

先復習一下,看一下之前的兩篇文章

然后我們說一說AspectJ代理:
AspectJ靜態編譯織入(Aspect for java),他其實是一套獨立的面向切面編程的解決方案。Spring中雖然使用了Aspect的Annotation,但是并沒有使用它的編譯器和織入器。

關于AOP的相關概念學習可以看:《SpringAOP基礎以及四種實現方式》

添加如下配置就可以啟用Spring對@AspectJ方面配置的支持。

<aop:aspectj-autoproxy/>

我們知道靜態代理唯一的缺點就是我們需要對每一個方法編寫我們的代理邏輯,造成了工作的繁瑣和復雜。AspectJ就是為了解決這個問題,在編譯成class字節碼的時候在方法周圍加上業務邏輯。復雜的工作由特定的編譯器幫我們做。

它其實不是一個新的語言,它就是一個代碼編譯器(也就是AJC),在Java編譯器的基礎上增加了一些它自己的關鍵字識別和編譯方法。因此,ajc也可以編譯Java代碼。它在編譯期將開發者編寫的Aspect程序編織到目標程序中,對目標程序作了重構,目的就是建立目標程序與Aspect程序的連接(耦合,獲得對方的引用(默認情況下,也就是不使用this或target來約束切點的情況下,那么獲得的是聲明類型,不是運行時類型)和上下文信息),從而達到AOP的目的(這里在編譯期還是修改了原來程序的代碼,但是是AJC替我們做的)。

小結

  • Aspectj并不是動態的在運行時生成代理類,而是在編譯的時候就植入代碼到class文件
  • 由于是靜態織入的,所以性能相對來說比較好
  • Aspectj不受類的特殊限制,不管方法是private、或者static、或者final的,都可以代理
  • Aspectj不會代理除了限定方法之外任何其他諸如toString(),clone()等方法
  • 總結

    以上是生活随笔為你收集整理的AspectJ 实现代理的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。