Lombok插件看法淺談


背景

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

簡要說明:

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

優點:

  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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM