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

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

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

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

問題:

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

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

分析:

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

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

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

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

舉例如下:

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

這個是基于MapStruct注解定義的mapper接口

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

經(jīng)過mapstruct的注解處理器,對UserDTOMapper自動生成了接口實現(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的處理過程的。

這里仍然有個細節(jié)大家可以關注下:

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

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

總結(jié)

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

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

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

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

相關文章

  • 詳解Java?中的函數(shù)式接口

    詳解Java?中的函數(shù)式接口

    這篇文章主要為大家介紹了Java中的函數(shù)式接口,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助<BR>
    2021-12-12
  • Java圖形界面開發(fā)之簡易記事本

    Java圖形界面開發(fā)之簡易記事本

    這篇文章主要為大家詳細介紹了Java圖形界面開發(fā)之簡易記事本的制作方法,,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-10-10
  • spring @Component注解原理解析

    spring @Component注解原理解析

    這篇文章主要介紹了spring @Component注解原理解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-02-02
  • java批量下載生成zip壓縮包的思路詳解

    java批量下載生成zip壓縮包的思路詳解

    這篇文章主要介紹了java批量下載生成zip壓縮包的思路詳解,設計思路大概是本地先創(chuàng)建一個zip文件,將批量下載的文件依次放入zip文件中,將zip文件返回給前端,本文結(jié)合實例代碼講解的非常詳細,需要的朋友可以參考下
    2024-01-01
  • springboot AutoConfigureAfter控制Bean的注入順序方法詳解

    springboot AutoConfigureAfter控制Bean的注入順序方法詳解

    這個文章主要介紹一下@AutoConfigureAfter在spring框架中的作用,在使用過程中,很多開發(fā)人員在使用它的時候都出現(xiàn)了問題,問題比較多的就是它們的注冊順序總不是我們預期的,下面介紹一下正常的使用方法,感興趣的朋友一起看看吧
    2024-05-05
  • Java實現(xiàn)隨機出題,10道10以內(nèi)加減法計算代碼實例

    Java實現(xiàn)隨機出題,10道10以內(nèi)加減法計算代碼實例

    這篇文章主要介紹了Java實現(xiàn)隨機出題,10道10以內(nèi)加減法計算,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-04-04
  • java求最大公約數(shù)與最小公倍數(shù)的方法示例

    java求最大公約數(shù)與最小公倍數(shù)的方法示例

    這篇文章主要介紹了java求最大公約數(shù)與最小公倍數(shù)的方法,涉及java數(shù)值運算的相關操作技巧,并附帶分析了eclipse環(huán)境下設置運行輸入?yún)?shù)的相關操作技巧,需要的朋友可以參考下
    2017-11-11
  • SSM框架把日志信息保存到數(shù)據(jù)庫過程詳解

    SSM框架把日志信息保存到數(shù)據(jù)庫過程詳解

    這篇文章主要介紹了SSM框架把日志信息保存到數(shù)據(jù)庫過程詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-07-07
  • Java版本的回文字算法(java版本)

    Java版本的回文字算法(java版本)

    本文給大家分享一段java代碼關于回文字算法的實例代碼,代碼簡單易懂,需要的朋友一起看看吧
    2016-10-10
  • java9在interface中定義私有方法詳解

    java9在interface中定義私有方法詳解

    在本篇內(nèi)容里小編給大家整理的是一篇關于java9在interface中定義私有方法,有興趣的朋友們可以學習下。
    2020-10-10

最新評論