Lombok插件見解淺談

背景

最近接觸的幾個工程中Lombok插件出現頻率比較高,趁機瞭解一下原理。git

簡要說明:

受益於JSR 269 API,程序能夠在編譯階段對AST進行節點的操做,從而注入相關的功能結點,從而包含在最終的字節碼文件裏。github

優勢:

  1. 減小了coding過程當中的一些Getter/Setter等代碼的生成。

缺點:

  1. 代碼可讀性差;
  2. 代碼調試不方便;
  3. IDE須要插件支持。

總結:

  1. 總體而言,我的認爲使用lombok弊大於利,不建議使用;
  2. JSR 269是個比較有意思的東西,作一些分析類的工具應該有幫助。

擴展思考:

Spring AOP的部分是否可使用JSR 269原理生成字節碼,而不是運行時動態生成呢?
我認爲是能夠的,Spring的AOP是基於動態代理實現的,根據實際場景和具體配置不一樣有JDK原生動態代理和Cglib兩種不一樣的實現。在Spring以前就已經有AOP的成熟實現了,並且也是在編譯期使用字節碼織入的方式,思路與lombok一致,那就是大名鼎鼎的AspectJ了,如今Spring中還沿用着它的AOP註解和語法。
不過AspectJ在JDK5就有了,那個時候JSR269還沒出現,因此它並非使用這種方式實現的。
看了下AspectJ的使用,發現跟lombok同樣,須要IDE支持,加強的部分要寫一些代碼。可是若是沒有Spring的話,我很樂意使用AspectJ來實現AOP的使用,由於給代碼開發維護帶來的便利和靈活性很是高,整體而言,利大於弊。工具

參考文檔

  1. https://www.jianshu.com/p/63038c7c515a
  2. https://blog.mythsman.com/2017/12/19/1/
  3. https://github.com/rzwitserloot/lombok
  4. https://stackoverflow.com/questions/6107197/how-does-lombok-work
相關文章
相關標籤/搜索