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

Java中BeanUtils.copyProperties基本用法與小坑

 更新時(shí)間:2023年04月26日 10:36:57   作者:涼拌海蜇絲  
本文主要介紹了Java中BeanUtils.copyProperties基本用法與小坑,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

(1)實(shí)際應(yīng)用

BeanUtils.copyProperties(賦值目標(biāo)對(duì)象,模板源對(duì)象);
我們都知道當(dāng)有兩個(gè)對(duì)象AB,屬性名稱(chēng)一樣的情況下,如果需要把A的全部屬性給B,傳統(tǒng)寫(xiě)法是:

B.setXX(A.getXX());

如果只有幾個(gè)特別的參數(shù)需要賦值過(guò)去這樣寫(xiě)沒(méi)問(wèn)題,如果AB有100個(gè)參數(shù)需要粘過(guò)去,那么代碼就太冗余太長(zhǎng)了,BeanUtils.copyProperties就是為了解決這個(gè)問(wèn)題的,現(xiàn)在假設(shè)有AB兩個(gè)對(duì)象:

static class DemoA {
    private String name;
    private int sex;
    private int phone;
}

static class DemoB {
    private String name;
    private int sex;
    private int phone;
}

測(cè)試main方法:

public static void main(String[] args) throws Exception {
    DemoA a = new DemoA();
    DemoB b = new DemoB();
    a.setName("jojo");
    a.setPhone(12306);
    a.setSex(1);

    BeanUtils.copyProperties(b,a);
    System.out.println("b: "+b.getName()+b.getPhone()+b.getSex());
}

(2) 使用要注意的小坑

1:如果AB都是或者有一個(gè)是static的,賦值都會(huì)失敗


 

2:注意引入的包

import org.apache.commons.beanutils.BeanUtils;

之前手快引錯(cuò)了,死活拿不出來(lái),浪費(fèi)了一點(diǎn)時(shí)間Debug
如果用的是springframework的這個(gè)方法,記住復(fù)制對(duì)象和源對(duì)象位置是剛好相反。千萬(wàn)注意自己引入的哪個(gè)BeanUtil,寫(xiě)對(duì)應(yīng)參數(shù)位置。

3:不提供get,set方法

public static void main(String[] args) throws Exception {
    DemoA a = new DemoA("jojo",1,12306);
    DemoB b = new DemoB();

    BeanUtils.copyProperties(b,a);
    System.out.println("b: "+b.toString());
}

賦值失敗

為什么呢?因?yàn)椋讓邮峭ㄟ^(guò)反射獲取對(duì)象里面的每個(gè)屬性,再通過(guò)get,set獲取和設(shè)值,不提供get,set,就當(dāng)然沒(méi)辦法復(fù)制了。

4:加@Data注解

我們知道lombok.Data包中的@Data注解可以幫助我們省去get,set方法,那么不寫(xiě)getset,加@Data行不行?

結(jié)果是可以的,我個(gè)人理解的注解的本質(zhì)就是切面編程,把一些固定的邏輯通過(guò)增強(qiáng)型代理類(lèi)配置進(jìn)去,外部在使用的時(shí)候也就是使用增強(qiáng)型代理類(lèi)的方法,而@Data類(lèi)似一些省事的語(yǔ)法糖,幫助我們“寫(xiě)”了那堆get,set方法供別人調(diào)用。

5:參數(shù)名不一致的,不能復(fù)制成功

注意,參數(shù)名必須嚴(yán)格一致,例如:A.name 對(duì)應(yīng) B.name,如果是B.nAme或者B.names,那就肯定不行了!
如果剛好兩個(gè)實(shí)體類(lèi)參數(shù)名不一致,怎么辦呢?那只能用老的寫(xiě)法B.setNames(A.getName());

(3)以springframework.beans的BeanUtils.copyProperties為例,快速看幾眼源碼,不難理解

第一個(gè)參數(shù)是源,第二個(gè)參數(shù)是目標(biāo)對(duì)象

紅色方法就是反射創(chuàng)建對(duì)象方法

到此這篇關(guān)于Java中BeanUtils.copyProperties基本用法與小坑的文章就介紹到這了,更多相關(guān)BeanUtils.copyProperties用法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Mybatis調(diào)用視圖和存儲(chǔ)過(guò)程的方法

    Mybatis調(diào)用視圖和存儲(chǔ)過(guò)程的方法

    MyBatis支持普通sql的查詢(xún)、視圖的查詢(xún)、存儲(chǔ)過(guò)程調(diào)用,是一種非常優(yōu)秀的持久層框架。接下來(lái)通過(guò)本文給大家介紹mybatis調(diào)用視圖和存儲(chǔ)過(guò)程的方法,感興趣的朋友一起看看吧
    2016-10-10
  • SpringCloud Alibaba 基本開(kāi)發(fā)框架搭建過(guò)程

    SpringCloud Alibaba 基本開(kāi)發(fā)框架搭建過(guò)程

    這篇文章主要介紹了SpringCloud Alibaba 基本開(kāi)發(fā)框架搭建過(guò)程,開(kāi)發(fā)工具選用的idea,本文通過(guò)圖文實(shí)例相結(jié)合給大家分享搭建全過(guò)程,需要的朋友可以參考下
    2021-06-06
  • Spring Boot自定義配置屬性源(PropertySource)

    Spring Boot自定義配置屬性源(PropertySource)

    這篇文章主要介紹了Spring Boot自定義配置屬性源(PropertySource),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-06-06
  • Java 8中日期和時(shí)間的處理方法

    Java 8中日期和時(shí)間的處理方法

    Java 8新增了LocalDate和LocalTime接口,接下來(lái)通過(guò)本文給大家介紹Java 8中日期和時(shí)間的處理方法,非常不錯(cuò),感興趣的朋友一起看下吧
    2016-08-08
  • request.getRequestURL()等方法得到路徑的區(qū)別及說(shuō)明

    request.getRequestURL()等方法得到路徑的區(qū)別及說(shuō)明

    這篇文章主要介紹了request.getRequestURL()等方法得到路徑的區(qū)別及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • SpringBoot中事務(wù)失效的原因詳解

    SpringBoot中事務(wù)失效的原因詳解

    這篇文章主要介紹了SpringBoot中事務(wù)失效的原因詳解,spring中的事務(wù)是依賴(lài)AOP的,AOP是通過(guò)動(dòng)態(tài)代理實(shí)現(xiàn)的,只有通過(guò)代理類(lèi)訪問(wèn)的方法才能被攔截,需要的朋友可以參考下
    2023-10-10
  • idea編譯器工程out目錄修改方法步驟

    idea編譯器工程out目錄修改方法步驟

    多個(gè)工程在一個(gè)文件夾下,有時(shí)會(huì)變?yōu)樗械墓こ讨挥靡粋€(gè)out文件夾,這時(shí)運(yùn)行會(huì)出錯(cuò),所以本文就來(lái)介紹一下out目錄修改,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-09-09
  • Java的Integer緩存池用法

    Java的Integer緩存池用法

    Java的Integer緩存池主要為了提升性能和節(jié)省內(nèi)存,它緩存了-128到127范圍內(nèi)的Integer對(duì)象,因此這些對(duì)象在比較時(shí)會(huì)直接比較引用,而不是值,其他包裝類(lèi)如Byte、Short、Character也有類(lèi)似的緩存池
    2025-02-02
  • Spring Cache優(yōu)化數(shù)據(jù)庫(kù)訪問(wèn)的項(xiàng)目實(shí)踐

    Spring Cache優(yōu)化數(shù)據(jù)庫(kù)訪問(wèn)的項(xiàng)目實(shí)踐

    本文主要介紹了Spring Cache優(yōu)化數(shù)據(jù)庫(kù)訪問(wèn)的項(xiàng)目實(shí)踐,將創(chuàng)建一個(gè)簡(jiǎn)單的圖書(shū)管理應(yīng)用作為示例,并演示如何通過(guò)緩存減少對(duì)數(shù)據(jù)庫(kù)的頻繁查詢(xún),感興趣的可以了解一下
    2024-01-01
  • Java實(shí)現(xiàn)雪花算法(snowflake)

    Java實(shí)現(xiàn)雪花算法(snowflake)

    這篇文章主要介紹了Java實(shí)現(xiàn)雪花算法(snowflake),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08

最新評(píng)論

朔州市| 惠安县| 通江县| 沁源县| 武清区| 辽阳市| 新昌县| 彝良县| 敖汉旗| 维西| 禹州市| 阳新县| 江川县| 西藏| 始兴县| 江陵县| 贺州市| 大同县| 西峡县| 十堰市| 山西省| 方山县| 新安县| 福鼎市| 道真| 奉化市| 新巴尔虎右旗| 康乐县| 永济市| 昭平县| 清远市| 桃江县| 临安市| 河津市| 西乌珠穆沁旗| 永年县| 荆州市| 乐清市| 凤阳县| 洛浦县| 安塞县|