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 实现代理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一次尴尬的笔试。。。
- 下一篇: 中文版小红伞是由旧版9.0英文版汉化而来