欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

基于Lombok集成springboot遇到的坑

 更新時間:2021年12月01日 10:09:21   作者:Jagger-Wang  
這篇文章主要介紹了Lombok集成springboot遇到的坑,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

Lombok集成springboot遇到的坑

最近有同事在spring boot中用Lombok @Data注解時遇到了一個奇怪的問題,然后有幸一起研究了一下,把研究成果記錄下來。

問題

先上代碼:

@Data
public abstract class TestAbstract {
    private RedisTemplate redisTemplate;
    public TestAbstract(RedisTemplate redisTemplate) {
        this.redisTemplate = redisTemplate;
    }
}
@Data
public class TestChild extends TestAbstract {
    @Autowired
    public TestChild(RedisTemplate redisTemplate) {
        super(redisTemplate);
    }
}

上面的代碼在spring boot 2.0.2版本可以正常運(yùn)行,但在2.0.3版本卻編譯錯誤。

Error:(13, 1) java: TestAbstract() 在 com.brotherj.learn.TestAbstract 中是private 訪問控制

查看了pom.xml文件后發(fā)現(xiàn)lombok的版本號是從spring boot繼承而來:

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <optional>true</optional>
</dependency>

然后又查看了spring boot pom.xml中的lombok版本號,發(fā)現(xiàn)從spring boot 2.0.3版本開始使用了lombok 1.16.22,而2.0.2版本使用的是1.16.20版本。

#2.0.2
<lombok.version>1.16.20</lombok.version>

#2.0.3
<lombok.version>1.16.22</lombok.version>

于是修改pom.xml版本號之后,問題解決。

 <dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <optional>true</optional>
    <version>1.16.20</version>
</dependency>

原因

問題解決后,決定研究一下具體的原因,由于Lombok只是依靠可插件化的Java自定義注解處理API(JSR 269: Pluggable Annotation Processing API)來實現(xiàn)在Javac編譯階段利用“Annotation Processor”對自定義的注解進(jìn)行預(yù)處理后生成真正在JVM上面執(zhí)行的“Class文件”。

所以應(yīng)該時兩個版本下編譯生成的class文件不同,于是比較了一下兩個版本下編譯后的class文件。

    public TestAbstract(RedisTemplate redisTemplate) {
        this.redisTemplate = redisTemplate;
    }
    //1.16.22會生成一個private的構(gòu)造方法,而1.16.20不會生成
    private TestAbstract() {
    }

     @Autowired
    public TestChild(RedisTemplate redisTemplate) {
        super(redisTemplate);
    }
    private TestChild() {
    }

看到這里一切就都清楚了,是類加載順序?qū)е碌膯栴}。

先復(fù)習(xí)一下類加載順序:(靜態(tài)變量、靜態(tài)初始化塊)–>(變量、初始化塊)–> 構(gòu)造器。如果有父類,加載順序是:父類static方法 –> 子類static方法 –> 父類構(gòu)造方法- -> 子類構(gòu)造方法 。

也就是說,當(dāng)加載TestChild類時先加載類TestAbstract的構(gòu)造方法,而類TestAbstract的空參構(gòu)造為private,于是報了訪問控制的錯誤。

springboot引入Lombok

傳統(tǒng)的寫法,要寫一串串的get()、set()方法等等

現(xiàn)引入Lombok

pom.xml引入

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
</dependency>

引入后發(fā)現(xiàn),在實體類上面使用@Data找不到import的包

網(wǎng)上巴拉巴拉,發(fā)現(xiàn)是springBoot的版本和import的版本不統(tǒng)一,加上

<optional>true</optional>

提示版本信息,改為可用的版本即可。修正后如下:

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <optional>true</optional>
    <version>1.18.2</version>
</dependency>

終于可以正常導(dǎo)入^_^

延伸閱讀(1):

idea安裝Lombok插件

File——Settings——Plugins——Marketplact

延伸閱讀(2):

常見參數(shù)

  • @Setter 注解在類或字段,注解在類時為所有字段生成setter方法,注解在字段上時只為該字段生成setter方法。
  • @Getter 使用方法同上,區(qū)別在于生成的是getter方法。
  • @ToString 注解在類,添加toString方法。
  • @EqualsAndHashCode 注解在類,生成hashCode和equals方法。
  • @NoArgsConstructor 注解在類,生成無參的構(gòu)造方法。
  • @RequiredArgsConstructor 注解在類,為類中需要特殊處理的字段生成構(gòu)造方法,比如final和被@NonNull注解的字段。
  • @AllArgsConstructor 注解在類,生成包含類中所有字段的構(gòu)造方法。
  • @Data 注解在類,為類的所有字段注解@ToString、@EqualsAndHashCode、@Getter的便捷方法,同時為所有非final字段注解@Setter。

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java?同步工具與組合類的線程安全性解析

    Java?同步工具與組合類的線程安全性解析

    這篇文章主要介紹了Java?同步工具與組合類的線程安全性解析,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-09-09
  • Java實現(xiàn)九宮格的簡單實例

    Java實現(xiàn)九宮格的簡單實例

    這篇文章主要介紹了 Java實現(xiàn)九宮格的簡單實例的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • Response.AddHeader案例講解

    Response.AddHeader案例講解

    這篇文章主要介紹了Response.AddHeader案例講解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • Java比較對象大小兩種常用方法

    Java比較對象大小兩種常用方法

    這篇文章主要介紹了Java比較對象大小兩種常用方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-10-10
  • 教你用java?stream對集合中的對象按指定字段進(jìn)行分組并統(tǒng)計

    教你用java?stream對集合中的對象按指定字段進(jìn)行分組并統(tǒng)計

    這篇文章主要給大家介紹了關(guān)于用java?stream對集合中的對象按指定字段進(jìn)行分組并統(tǒng)計的相關(guān)資料,本文主要介紹了如何利用Java的Stream流來實現(xiàn)在list集合中,對具有相同name屬性的對象進(jìn)行匯總計算的需求,需要的朋友可以參考下
    2024-10-10
  • Java利用遞歸實現(xiàn)樹形結(jié)構(gòu)的工具類

    Java利用遞歸實現(xiàn)樹形結(jié)構(gòu)的工具類

    有時候,我們的數(shù)據(jù)是帶有層級的,比如常見的省市區(qū)三級聯(lián)動,就是一層套著一層。而我們在數(shù)據(jù)庫存放數(shù)據(jù)的時候,往往是列表形式的,這個時候可能就需要遞歸處理為樹形結(jié)構(gòu)了。本文就為大家介紹了Java利用遞歸實現(xiàn)樹形結(jié)構(gòu)的工具類,希望對大家有所幫助
    2023-03-03
  • 深入了解JAVA泛型

    深入了解JAVA泛型

    這篇文章主要介紹了JAVA泛型的相關(guān)知識,文中代碼非常詳細(xì),供大家參考和學(xué)習(xí),感興趣的朋友可以了解下
    2020-06-06
  • javaweb實戰(zhàn)之商城項目開發(fā)(三)

    javaweb實戰(zhàn)之商城項目開發(fā)(三)

    這篇文章主要針對javaweb商城項目開發(fā)進(jìn)行實戰(zhàn)演習(xí),主要實現(xiàn)通用的BaseDao.java和使用resultMap映射關(guān)聯(lián)對象,感興趣的小伙伴們可以參考一下
    2016-02-02
  • SpringBoot之@Value獲取application.properties配置無效的解決

    SpringBoot之@Value獲取application.properties配置無效的解決

    這篇文章主要介紹了SpringBoot之@Value獲取application.properties配置無效的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • Mybatis源碼解析之事務(wù)管理

    Mybatis源碼解析之事務(wù)管理

    大家好,本篇文章主要講的是Mybatis源碼解析之事務(wù)管理,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12

最新評論