<menu id="guoca"></menu>
<nav id="guoca"></nav><xmp id="guoca">
  • <xmp id="guoca">
  • <nav id="guoca"><code id="guoca"></code></nav>
  • <nav id="guoca"><code id="guoca"></code></nav>

    Lombok 同時使?@Data和@Builder 的坑,你中招沒?

    VSole2022-07-21 17:36:36

    問題背景

    Lombok使? 同時使?@Data@Builder ,構建無參構造器報錯!編譯不通過。如下圖:

    Lombok @Data和@Builder分別單獨分析用法

    Lombok使?@Data可以?成?參構造和類??所有屬性的getter/setter?法。可以簡化我們代碼的開發。(需要安裝Lombok插件和引?Lombok依賴)。

    例如下?的?個實體類,引?Lombok后,可以?動?成GET/SET?法和?參構造函數。

    編譯后的class為:可以看到不僅幫我們生成了get和set ,同時也有默認的無參構造器

    那么怎么自動生成有參構造器呢?使用@Builder注解,將會幫助我們?成全屬性的構造?法。

    編譯后的class為:可以看到 已經幫我們構建好了全屬性的構造方法,但是如果值只引用@Builder注解是無法生成get和set的。

    但是如果同時使?@Data@Builder的話,可以看出盡管?成了GET/SET?法,但是?參構造?法沒有了,這顯然是不能接受的,因為很多框架都會調??參構造去創建對象。

    編譯后的class:

    我們嘗試在Tet1類,?動添加?參構造?法。編譯發現報錯不通過:

    解決方法

    方法一

    Lombok同時使?@Data@Builder的時候,如果要?成?參構造,需要在代碼???動引?注解@Tolerate,讓Lombok在?成類的時候,對指定的構造函數不感知。

    方法二

    直接使用無參構造器+有參構造器的方式,@RequiredArgsConstructor 來構建有參,@NoArgsConstructor來構建無參構造器,如圖所示:

    編譯后效果:

    Lombok原理

    Java的編譯分為以下?個階段:

    解析與填充符號表->注解處理->分析與字節碼?成->?成?進制class?件。

    • Lombok 使?的是 JDK 6 實現的 JSR 269: Pluggable Annotation Processing API (編譯期的注解處理器),它是在編譯期時把 Lombok 的注解代碼,轉換為常規的 Java ?法?實現注?。
    • 在編譯期階段,當 Java 源碼被抽象成語法樹 (AST) 之后,Lombok 會根據??的注解處理器動態的修改AST,增加新的代碼 (節點),在這?切執?之后,再通過分析?成了最終的字節碼 (.class) ?件,這就是Lombok 的執?原理。

    可以借助注解處理器實現?個簡單的 Setter,我們的實現步驟是:

    • ?定義?個注解標簽接?,并實現?個?定義的注解處理器;
    • 利? tools.jar 的 javac api 處理 AST (抽象語法樹)3. 使??定義的注解處理器編譯代碼。

    1.定義?定義注解和注解處理器

    ?先創建?個 MySetter.java ?定義?個注解,代碼如下:

    再實現?個?定義的注解處理器,代碼如下:

    測試類如下:

    2.對注解處理器進?編譯,隨后使?注解處理器對類進?編譯

    ?先需要先對注解處理器進?編譯(javac -cp ?于引?第三?jar包進?編譯)

    然后使?注解處理器對這個Person測試類進?編譯:

    這時候再看?成的Person.class,可以發現Setter?法已經?成了:

    總結

    當然盡管測試類已經?成Setter?法,但是因為是在編譯時期?成的,因此我們在開發的時候是沒法直接調?Setter?法的,因此Lombok提供了插件機制,?便我們在開發的時候可以直接去調?Lombok的特性。

    data構造器
    本作品采用《CC 協議》,轉載必須注明作者和本文鏈接
    (需要安裝Lombok插件和引?參構造去創建對象。編譯發現報錯不通過:解決方法方法一Lombok同時使?注解@Tolerate,讓Lombok在?成類的時候,對指定的構造函數不感知。在編譯期階段,當 Java 源碼被抽象成語法樹 之后,Lombok 會根據??個簡單的 Setter,我們的實現步驟是:?法的,因此Lombok提供了插件機制,?
    MyBatis-Plus是一個 MyBatis 的增強工具,在 MyBatis 的基礎上只做增強不做改變,為簡化開發、提高效率而生。真實開發中,version(樂觀鎖),deleted、gmt_create、gem_mo
    每次聊到代碼優化,都會有很多人說理論、架構、核心思路,其實我覺得代碼優化這事說簡單了很簡單,說復雜了吧它也有一定的難度,但是我覺得有一個良好的編碼習慣很重要,下面分享一下14個springboot項目中優化代碼的小技巧,讓代碼優化跟容易,就像完成一件小事。
    最近兩個月我一直在做拒絕服務漏洞相關的時間,并收獲了Spring和Weblogic的兩個CVE但DoS漏洞終歸是雞肋洞,并沒有太大的意義,比如之前有人說我只會水垃圾洞而已,所以在以后可能打算做其他方向早上和pyn3rd師傅聊天
    近幾天在網上找了一個 Spring Security 和 JWT 的例子來學習
    CodeQL上手筆記
    2021-11-18 14:54:52
    在挖了一段時間的漏洞后,逐漸感覺挖洞變成了一個體力活,雖然也使用正則匹配的方式減少了部分工作量,但這種方式還是有很大的缺陷,準確率比較低,因此希望找到一種新的方式來輔助挖洞,最近CodeQL比較火,很多師傅也寫了相應的文章,相對來說學習成本已經算比較低了。盡管看了很多師傅的文章,但感覺上自己對原理或者語法的學習還是比較遲鈍,因此打算去分析師傅們已經寫好的一些query語法,輔助理解。
    【經典回顧系列】 Windows SMB Ghost CVE-2020-0796漏洞分析與利用(三)
    Lodash 是一個 JavaScript 庫,包含簡化字符串、數字、數組、函數和對象編程的工具,可以幫助程序員更有效地編寫和維護 JavaScript 代碼。并且是一個流行的 npm 庫,僅在GitHub 上就有超過 400 萬個項目使用,Lodash的普及率非常高,每月的下載量超過 8000 萬次。但是這個庫中有幾個嚴重的原型污染漏洞。
    在工作中,多多少少會遇到花指令的情況,本系列文章我會慢慢更新,把我學習過程分享給大家,從簡單的構造到如何結合手頭的工具patch。這里為什么沒有研究x86,第一因為我不會第二個原因是x86是非定長指令集,這會導致x86有那種雙字節的花指令不適合線形掃描,要校驗的太多了無法通過定長4字節的方式進行線性掃描。第一章簡單的花指令構造與修正◆example1 _main:
    XLoader是一種長期存在的惡意軟件即服務(MaaS)信息竊取和僵尸網絡,自2015年以來便一直以某種形式存在。它的第一個macOS變體于2021年被發現,并以編譯的.JAR文件形式作為一個Java程序進行分發。但這樣的文件需要Java運行環境,因此惡意的.jar文件不會在默認的macOS安裝上執行,因為蘋果在十多年前就已停止向Mac提供JRE。
    VSole
    網絡安全專家
      亚洲 欧美 自拍 唯美 另类