最近接觸的幾個工程中Lombok插件出現頻率比較高,趁機瞭解一下原理。git
受益於JSR 269 API,程序能夠在編譯階段對AST進行節點的操做,從而注入相關的功能結點,從而包含在最終的字節碼文件裏。github
Spring AOP的部分是否可使用JSR 269原理生成字節碼,而不是運行時動態生成呢?
我認爲是能夠的,Spring的AOP是基於動態代理實現的,根據實際場景和具體配置不一樣有JDK原生動態代理和Cglib兩種不一樣的實現。在Spring以前就已經有AOP的成熟實現了,並且也是在編譯期使用字節碼織入的方式,思路與lombok一致,那就是大名鼎鼎的AspectJ了,如今Spring中還沿用着它的AOP註解和語法。
不過AspectJ在JDK5就有了,那個時候JSR269還沒出現,因此它並非使用這種方式實現的。
看了下AspectJ的使用,發現跟lombok同樣,須要IDE支持,加強的部分要寫一些代碼。可是若是沒有Spring的話,我很樂意使用AspectJ來實現AOP的使用,由於給代碼開發維護帶來的便利和靈活性很是高,整體而言,利大於弊。工具