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

MapStruct升級遇到的問題及解決方案

 更新時(shí)間:2024年12月06日 09:25:15   作者:小白學(xué)架構(gòu)  
MapStruct是一個(gè)用于生成類型安全,本文來介紹一下MapStruct升級遇到的問題及解決方案,具有一定的參考價(jià)值,感興趣的可以了解一下

大家知道,MapStruct是一個(gè)用于生成類型安全,高性能和無依賴的bean映射代碼的注釋處理器。雖然它提高了一個(gè)一個(gè)字段進(jìn)行set賦值的開發(fā)效率,但是版本升級也可能有不兼容的問題。

問題:

1..升級mapstruct到1.3.0版本之后,當(dāng)target類使用lombok的@Builder注解,并且source類和target類的首字母不同的字段沒有被正確轉(zhuǎn)換(1.2.0版本可以正常轉(zhuǎn)換)。

2.升級mapstruct到1.3.0版本之后,當(dāng)target類使用lombok的@Builder注解,并且需要映射到父類的屬性,則編譯時(shí)會報(bào)  Unknown property

分析:

MapStruct 和lombok 的相遇,如果版本不一致,就會帶來一定的問題。

MapStruct是一個(gè)用于生成類型安全,高性能和無依賴的bean映射代碼的注釋處理器;

而LombokLombok是一款Java開發(fā)插件,使得Java開發(fā)者可以通過其定義的一些注解來消除業(yè)務(wù)工程中冗長和繁瑣的代碼,比如get set等,尤其對于簡單的Java模型對象(POJO)。

兩者都是通過注解處理器在編譯期生成對應(yīng)的代碼。

舉例如下:

下圖為基于Lombok注解的POJO類:

這個(gè)是基于MapStruct注解定義的mapper接口

經(jīng)過lombok的注解處理器,編譯后的class如下:

經(jīng)過mapstruct的注解處理器,對UserDTOMapper自動生成了接口實(shí)現(xiàn)類:

結(jié)論:

可見,mapstruct 的注解處理器必須晚于 lombok的注解處理器執(zhí)行,才能保證bean 屬性能被正確映射。而出現(xiàn)上述問題的原因就在于lombok 和 mapstruct的執(zhí)行順序被打亂了。

解決方案:

 在編譯插件中控制注解處理器的順序。

pom 如下:

       <plugin> 
          <groupId>org.apache.maven.plugins</groupId>  
          <artifactId>maven-compiler-plugin</artifactId>  
          <version>${maven-compiler-plugin.version}</version>  
          <configuration> 
            <source>${java.version}</source>  
            <target>${java.version}</target>
<!--            <release>${java.version}</release>-->
            <annotationProcessorPaths> 
              <path> 
                <groupId>org.projectlombok</groupId>  
                <artifactId>lombok</artifactId>  
                <version>${lombok-plugin.version}</version> 
              </path>  
              <path> 
                <groupId>org.mapstruct</groupId>  
                <artifactId>mapstruct-processor</artifactId>  
                <version>${mapstruct-plugin.version}</version> 
              </path>  
              <path> 
                <groupId>org.projectlombok</groupId>  
                <artifactId>lombok-mapstruct-binding</artifactId>  
                <version>${lombok-mapstruct-binding-plugin.version}</version> 
              </path> 
            </annotationProcessorPaths> 
          </configuration> 
        </plugin>

其中 lombok-mapstruct-binding 的包正是為了協(xié)調(diào)lombok和mapstruct的處理過程的。

這里仍然有個(gè)細(xì)節(jié)大家可以關(guān)注下:

(1)在annotationProcessorPaths 中去掉lombok-mapstruct-binding  這個(gè)包,其實(shí)也可以正確執(zhí)行的。只要lombok的path 聲明在 mapstruct之前。

(2)上述的annotationProcessorPaths配置,如果顛倒了lombok和mapstruct的順序,其實(shí)也是可以正確執(zhí)行的,只要同時(shí)引入了lombok-mapstruct-binding 

總結(jié)

1.在POM中沒有annotationProcessorPaths時(shí),Maven使用的classPath作為注解處理器執(zhí)行的順序,而classPath的順序正是dependencies中匯入的順序。

2.當(dāng)MapStruct依賴在Lombok依賴前面時(shí),在執(zhí)行注解處理器期間, 由于Lombok還未生成get、set程式碼,因此在MapStruct看來,這些類并沒有公開的成員變數(shù),也就無從生成用于轉(zhuǎn)換的方法。

3.在使用annotationProcessorPaths后,其強(qiáng)制規(guī)定了注解處理器的順序,dependencies中的順序就被忽略了,Maven一定會先執(zhí)行Lombok再執(zhí)行MapStruct。

到此這篇關(guān)于MapStruct升級遇到的問題及解決方案的文章就介紹到這了,更多相關(guān)MapStruct升級內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • spring boot切面execution表達(dá)式添加多個(gè)包路徑問題及解決方案

    spring boot切面execution表達(dá)式添加多個(gè)包路徑問題及解決方案

    在Spring Boot中,如果你想為多個(gè)包中的方法創(chuàng)建一個(gè)切面,你可以在@Pointcut注解中使用||操作符來指定多個(gè)包,下面給大家分享spring boot切面execution表達(dá)式添加多個(gè)包路徑問題及解決方案,感興趣的朋友跟隨小編一起看看吧
    2024-03-03
  • Java中的線程同步全面講解

    Java中的線程同步全面講解

    線程同步指的是在多線程環(huán)境下,通過某種機(jī)制來協(xié)調(diào)多個(gè)線程對共享資源的訪問,確保在同一時(shí)刻只有一個(gè)線程能夠訪問共享資源,從而避免數(shù)據(jù)不一致和其他并發(fā)問題,這篇文章主要介紹了Java中線程同步的相關(guān)資料,需要的朋友可以參考下
    2025-07-07
  • Java中List集合的常用方法詳解

    Java中List集合的常用方法詳解

    這篇文章主要為大家詳細(xì)介紹了Java中List集合的常用方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02
  • Java使用POI導(dǎo)出大數(shù)據(jù)量Excel的方法

    Java使用POI導(dǎo)出大數(shù)據(jù)量Excel的方法

    今天需要寫一個(gè)導(dǎo)出的Excel的功能,但是發(fā)現(xiàn)當(dāng)數(shù)據(jù)量到3萬條時(shí),列數(shù)在23列時(shí),內(nèi)存溢出,CPU使用100%,測試環(huán)境直接炸掉。小編給大家分享基于java使用POI導(dǎo)出大數(shù)據(jù)量Excel的方法,感興趣的朋友一起看看吧
    2019-11-11
  • java設(shè)計(jì)模式學(xué)習(xí)之策略模式

    java設(shè)計(jì)模式學(xué)習(xí)之策略模式

    這篇文章主要為大家詳細(xì)介紹了java設(shè)計(jì)模式學(xué)習(xí)之策略模式的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • Java并發(fā)編程之線程狀態(tài)介紹

    Java并發(fā)編程之線程狀態(tài)介紹

    這篇文章主要介紹了Java并發(fā)編程之線程狀態(tài),當(dāng)線程被創(chuàng)建并啟動以后,它既不是一啟動就進(jìn)入了執(zhí)行狀態(tài),也不是一直處于執(zhí)行狀態(tài),下面和小編一起進(jìn)入文章了解具體的相關(guān)介紹吧
    2022-04-04
  • java中Set接口常用方法詳解

    java中Set接口常用方法詳解

    在Java編程中Set接口是集合框架的一部分,它繼承自Collection接口,主要用于存儲不包含重復(fù)元素的集合,這篇文章主要介紹了java中Set接口常用方法的相關(guān)資料,需要的朋友可以參考下
    2026-03-03
  • SpringBoot 如何整合 ES 實(shí)現(xiàn) CRUD 操作

    SpringBoot 如何整合 ES 實(shí)現(xiàn) CRUD 操作

    這篇文章主要介紹了SpringBoot 如何整合 ES 實(shí)現(xiàn) CRUD 操作,幫助大家更好的理解和使用springboot框架,感興趣的朋友可以了解下
    2020-10-10
  • springboot項(xiàng)目中集成shiro+jwt完整實(shí)例代碼

    springboot項(xiàng)目中集成shiro+jwt完整實(shí)例代碼

    本文詳細(xì)介紹如何在項(xiàng)目中集成Shiro和JWT,實(shí)現(xiàn)用戶登錄校驗(yàn)、token攜帶及接口權(quán)限管理,涉及自定義Realm、ModularRealmAuthenticator和JwtFilter的配置,對springboot?集成shiro?jwt完整示例感興趣的朋友一起看看吧
    2025-08-08
  • java中Optional的核心用法和最佳實(shí)踐

    java中Optional的核心用法和最佳實(shí)踐

    Java8中Optional用于處理可能為null的值,減少空指針異常,這篇文章主要介紹了java中Optional核心用法和最佳實(shí)踐的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-06-06

最新評論

开封市| 嘉荫县| 定远县| 深州市| 营山县| 江孜县| 高平市| 大港区| 安新县| 寻甸| 响水县| 建宁县| 鹤峰县| 洪雅县| 阳谷县| 兰西县| 墨江| 万山特区| 区。| 湘西| 古浪县| 腾冲县| 高唐县| 财经| 监利县| 河西区| 镇雄县| 法库县| 湄潭县| 高青县| 建昌县| 连州市| 延边| 阳东县| 德令哈市| 米易县| 于田县| 松溪县| 达尔| 平邑县| 六枝特区|