最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

基于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版本可以正常運行,但在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”對自定義的注解進行預處理后生成真正在JVM上面執(zhí)行的“Class文件”。

所以應該時兩個版本下編譯生成的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ū)е碌膯栴}。

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

也就是說,當加載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>

終于可以正常導入^_^

延伸閱讀(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設(shè)計模式之工廠模式實現(xiàn)方法詳解

    Java設(shè)計模式之工廠模式實現(xiàn)方法詳解

    這篇文章主要介紹了Java設(shè)計模式之工廠模式實現(xiàn)方法,結(jié)合實例形式較為詳細的分析了工廠模式的分類、原理、實現(xiàn)方法與相關(guān)注意事項,需要的朋友可以參考下
    2017-12-12
  • 關(guān)于Java Guava ImmutableMap不可變集合源碼分析

    關(guān)于Java Guava ImmutableMap不可變集合源碼分析

    這篇文章主要介紹Java Guava不可變集合ImmutableMap的源碼分析的相關(guān)資料,需要的朋友可以參考下面具體的文章內(nèi)容
    2021-09-09
  • spring中jdbcTemplate.batchUpdate的幾種使用情況

    spring中jdbcTemplate.batchUpdate的幾種使用情況

    本文主要介紹了spring中jdbcTemplate.batchUpdate的幾種使用情況,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-04-04
  • jdk線程池的實現(xiàn)

    jdk線程池的實現(xiàn)

    本文主要介紹了jdk線程池的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-04-04
  • Java線程安全狀態(tài)專題解析

    Java線程安全狀態(tài)專題解析

    線程安全是多線程編程時的計算機程序代碼中的一個概念。在擁有共享數(shù)據(jù)的多條線程并行執(zhí)行的程序中,線程安全的代碼會通過同步機制保證各個線程都可以正常且正確的執(zhí)行,不會出現(xiàn)數(shù)據(jù)污染等意外情況
    2022-03-03
  • SpringBoot連接Hive實現(xiàn)自助取數(shù)的示例

    SpringBoot連接Hive實現(xiàn)自助取數(shù)的示例

    這篇文章主要介紹了SpringBoot連接Hive實現(xiàn)自助取數(shù)的示例,幫助大家更好的理解和使用springboot框架,感興趣的朋友可以了解下
    2020-12-12
  • Thymeleaf中th:each及th:if使用方法解析

    Thymeleaf中th:each及th:if使用方法解析

    這篇文章主要介紹了Thymeleaf中th:each及th:if使用方法解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-08-08
  • Java如何使用HTTPclient訪問url獲得數(shù)據(jù)

    Java如何使用HTTPclient訪問url獲得數(shù)據(jù)

    這篇文章主要介紹了Java使用HTTPclient訪問url獲得數(shù)據(jù)的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • SpringBoot接收接口入?yún)⒌姆绞叫〗Y(jié)

    SpringBoot接收接口入?yún)⒌姆绞叫〗Y(jié)

    這篇文章主要給大家介紹了SpringBoot接收接口入?yún)⒌膸追N方式,我們從調(diào)用方的視角去看待這個問題,對調(diào)用方來說,它在調(diào)用接口時有好幾種傳參方式,下面,將會依次對這幾種參數(shù)方式進行講解和代碼示例,需要的朋友可以參考下
    2024-01-01
  • ClassLoader類加載源碼解析

    ClassLoader類加載源碼解析

    這篇文章主要為大家詳細解析了ClassLoader類加載源碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-09-09

最新評論

铁岭市| 阳西县| 嵩明县| 绥棱县| 宝丰县| 新邵县| 东丽区| 文昌市| 韶关市| 阿克陶县| 南岸区| 融水| 平果县| 南皮县| 垣曲县| 隆子县| 仙游县| 桃源县| 城口县| 益阳市| 宜君县| 沧州市| 元谋县| 凌源市| 金湖县| 平和县| 兴安县| 东乡族自治县| 界首市| 高要市| 襄垣县| 米泉市| 三门峡市| 临汾市| 偃师市| 浠水县| 新安县| 尚义县| 江源县| 百色市| 广饶县|