亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

詳解Spring中BeanUtils工具類的使用

 更新時間:2022年06月29日 08:24:47   作者:IT利刃出鞘  
這篇文章主要通過一些示例為大家詳細介紹了Spring中BeanUtils工具類的使用,文中的示例代碼講解詳細,感興趣的小伙伴可以了解一下

簡介

說明

本文介紹Spring的BeanUtils工具類的用法。

我們經(jīng)常需要將不同的兩個對象實例進行屬性復制,比如將DO對象進行屬性復制到DTO,這種轉(zhuǎn)換最原始的方式就是手動編寫大量的 get/set代碼,很繁瑣。為了解決這一痛點,就誕生了一些方便的類庫,常用的有 Apache的 BeanUtils,Spring的 BeanUtils, Dozer,Orika等拷貝工具。

由于Apache的BeanUtils的性能很差,強烈不建議使用。阿里巴巴Java開發(fā)規(guī)約插件上也明確指出:
“Ali-Check | 避免用Apache Beanutils進行屬性的copy。”

Spring的BeanUtils方法

方法說明
BeanUtils.copyProperties(source, target);source對應的對象成員賦值給target對應的對象成員
BeanUtils.copyProperties(source, target, "id", "time");忽略拷貝某些字段。本處是忽略:id與time

Spring的BeanUtils方法注意事項 

泛型只在編譯期起作用,不能依靠泛型來做運行期的限制; 

淺拷貝和深拷貝

淺拷貝:對基本數(shù)據(jù)類型進行值傳遞,對引用數(shù)據(jù)類型進行引用傳遞般的拷貝,此為淺拷貝

深拷貝:對基本數(shù)據(jù)類型進行值傳遞,對引用數(shù)據(jù)類型,創(chuàng)建一個新的對象,并復制其內(nèi)容,此為深拷貝。

Spring的BeanUtils與Apache的BeanUtils區(qū)別

Spring的BeanUtilsApache的BeanUtils
性能
原因:對兩個對象中相同名字的屬性進行簡單的get/set,僅檢查屬性的可訪問性

原因:有很多檢驗:類型的轉(zhuǎn)換、對象所屬類的可訪問性等
注意:本處類型轉(zhuǎn)換是類似的類,多個String轉(zhuǎn)為List<String>是不行的。
使用方面第一個參數(shù)是源,第二個參數(shù)是目標。
無需捕獲異常
第一個參數(shù)是目標,第二個參數(shù)是源。
必須捕獲異常
深/淺拷貝淺拷貝淺拷貝

Apache的BeanUtils方法。(依賴:maven里直接搜“commons-beanutils”)

方法說明
BeanUtils.copyProperties(Object target, Object source);source對應的對象成員賦值給target對應的對象成員
BeanUtils.copyProperties(Object target, String name, Object source); 只拷貝某些字段

Apache的BeanUtils支持的類型轉(zhuǎn)換

  1. java.lang.BigDecimal
  2. java.lang.BigInteger
  3. boolean and java.lang.Boolean
  4. byte and java.lang.Byte
  5. char and java.lang.Character
  6. java.lang.Class
  7. double and java.lang.Double
  8. float and java.lang.Float
  9. int and java.lang.Integer
  10. long and java.lang.Long
  11. short and java.lang.Short
  12. java.lang.String
  13. java.sql.Date
  14. java.sql.Time
  15. java.sql.Timestamp

java.util.Date是不被支持的,而它的子類java.sql.Date是被支持的。因此如果對象包含時間類型的屬性,且希望被轉(zhuǎn)換的時候,一定要使用java.sql.Date類型。否則在轉(zhuǎn)換時會提示argument mistype異常。

實例

entity

package com.example.entity;
 
import lombok.Data;
 
@Data
public class Question {
    private Integer id;
    private Integer studentId;
    private String content;
    private Integer value;
}
package com.example.entity;
 
import lombok.Data;
 
@Data
public class Student {
    private Integer id;
    private String name;
    private Integer points;
}

vo

package com.example.vo;
 
import lombok.Data;
 
import java.io.Serializable;
import java.util.List;
 
@Data
public class QuestionStudentVO implements Serializable {
    private Integer id;
    private String content;
    private Integer value;
    private Integer studentId;
 
    private List<String> name;
    private Integer points;
}

測試類

package com.example;
 
import com.example.entity.Question;
import com.example.entity.Student;
import com.example.vo.QuestionStudentVO;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.BeanUtils;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
 
@RunWith(SpringRunner.class)
@SpringBootTest
public class DemoApplicationTests {
    @Test
    public void beanUtilTest(){
        Question question = new Question();
        question.setId(2);
        // question.setStudentId(3);
        question.setContent("This is content");
        question.setValue(100);
 
        Student student = new Student();
        student.setId(3);
        student.setName("Tony Stark");
        student.setPoints(201);
 
        QuestionStudentVO questionStudentVO = new QuestionStudentVO();
 
        BeanUtils.copyProperties(question, questionStudentVO);
        BeanUtils.copyProperties(student, questionStudentVO);
        System.out.println(questionStudentVO);
    }
}

執(zhí)行結(jié)果

QuestionStudentVO(id=3, content=This is content, value=100, studentId=null, name=null, points=201)

到此這篇關(guān)于詳解Spring中BeanUtils工具類的使用的文章就介紹到這了,更多相關(guān)Spring BeanUtils工具類內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java并發(fā)系列之JUC中的Lock鎖與synchronized同步代碼塊問題

    Java并發(fā)系列之JUC中的Lock鎖與synchronized同步代碼塊問題

    這篇文章主要介紹了Java并發(fā)系列之JUC中的Lock鎖與synchronized同步代碼塊,簡單介紹了lock鎖及鎖的底層知識,結(jié)合案例給大家介紹的非常詳細,需要的朋友可以參考下
    2022-04-04
  • 零基礎(chǔ)入門學習——Spring Boot注解(一)

    零基礎(chǔ)入門學習——Spring Boot注解(一)

    這篇文章主要介紹了Spring Boot注解學習(一)要點,非常不錯,具有參考借鑒價值,需要的朋友參考下吧
    2017-05-05
  • Java的JDBC中Statement與CallableStatement對象實例

    Java的JDBC中Statement與CallableStatement對象實例

    這篇文章主要介紹了Java的JDBC中Statement與CallableStatement對象實例,JDBC是Java編程中用于操作數(shù)據(jù)庫的API,需要的朋友可以參考下
    2015-12-12
  • maven引入kabeja依賴的實現(xiàn)步驟

    maven引入kabeja依賴的實現(xiàn)步驟

    本文主要介紹了maven引入kabeja依賴的實現(xiàn)步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-09-09
  • SpringBoot?AOP?Redis實現(xiàn)延時雙刪功能實戰(zhàn)

    SpringBoot?AOP?Redis實現(xiàn)延時雙刪功能實戰(zhàn)

    本文主要介紹了SpringBoot?AOP?Redis實現(xiàn)延時雙刪功能實戰(zhàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-08-08
  • CyclicBarrier線程同步共享變量底層原理示例解析

    CyclicBarrier線程同步共享變量底層原理示例解析

    這篇文章主要為大家介紹了CyclicBarrier線程同步共享變量底層原理示例解析詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-07-07
  • Java中十六進制和十進制之間互相轉(zhuǎn)換代碼示例

    Java中十六進制和十進制之間互相轉(zhuǎn)換代碼示例

    這篇文章主要給大家介紹了關(guān)于Java中十六進制和十進制之間互相轉(zhuǎn)換的相關(guān)資料,我們項目過程中總是要用到十進制與十六進制相互轉(zhuǎn)換的方法,需要的朋友可以參考下
    2023-07-07
  • java解析XML詳解

    java解析XML詳解

    這篇文章主要介紹了XML解析四種方式代碼示例詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2021-07-07
  • 淺析Java 對象引用和對象本身

    淺析Java 對象引用和對象本身

    這篇文章主要介紹了Java 對象引用和對象本身的相關(guān)資料,幫助大家更好的理解和學習Java,感興趣的朋友可以了解下
    2020-08-08
  • ElasticSearch查詢文檔基本操作實例

    ElasticSearch查詢文檔基本操作實例

    這篇文章主要為大家介紹了ElasticSearch查詢文檔基本操作實例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-02-02

最新評論