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

聊聊BeanUtils.copyProperties和clone()方法的區(qū)別

 更新時間:2021年09月01日 10:12:16   作者:101之歌  
這篇文章主要介紹了聊聊BeanUtils.copyProperties和clone()方法的區(qū)別,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

最近擼代碼的時候發(fā)現(xiàn)有人將一個對象的值賦給另一個對象的時候,并沒有使用常規(guī)的set/get方法去給對象賦值,而是采用BeanUtils.copyProperties(A,B)這個方法去賦值,但是有的還是有局限性,比如Date類型的值無法賦值,只能賦值為null,所以我大致百度了一下,作為記錄。

首先,BeanUtils有兩種:

org.springframework.beans和org.apache.commons.beanutils,前面是spring的,后面是apache公司的。

效率:

傳統(tǒng)的set/get>spring的>apache的

我們首先來使用一下效率最慢的org.apache.commons.beanutils

需要在pom文件中引入這個包

并且要配合第三方的日志工具來使用,一般都是使用的是common logging包

<dependency>
    <groupId>commons-logging</groupId>
    <artifactId>commons-logging</artifactId>
    <version>1.1.3</version>
</dependency>
<dependency>
    <groupId>commons-beanutils</groupId>
    <artifactId>commons-beanutils</artifactId>
    <version>1.9.2</version>
</dependency>

在引入完成之后,我們新建一個類TestBean,里面有兩個屬性,userName和password

    private String userName;
    private String password;
    public String getUserName() {
        return userName;
    }
    public void setUserName(String userName) {
        this.userName = userName;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }

然后我們再新建一個類CopyBean,這個類中的屬性和上面的TestBean類相同

 private String userName;
    private String password;
    public String getUserName() {
        return userName;
    }
    public void setUserName(String userName) {
        this.userName = userName;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }

然后我們寫我們的main方法

public static void main(String[] args) {
        TestBean bean = new TestBean();
        bean.setUserName("qxf");
        bean.setPassword("123");
        CopyBean copyBean = new CopyBean();
        try {
   //這個地方如果你安裝了阿里的代碼檢測控件的話,會報錯,提示你使用spring的BeanUtils,而不要使用apache的BeanUtils
            BeanUtils.copyProperties(copyBean,bean);
            System.out.println(copyBean.getUserName());
            System.out.println(copyBean.getPassword());
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        }
    }

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

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

接下來我們再來使用一下spring的org.springframework.beans

在pom文件里面引入所需要的包

		<dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>5.0.7.RELEASE</version>
        </dependency>

然后新建CopyBean和TestBean兩個類,這兩個和上述的相同,因此在此不再贅述

Main方法

public static void main(String[] args) {
        TestBean bean = new TestBean();
        bean.setUserName("qxf");
        bean.setPassword("123");
        CopyBean copyBean = new CopyBean();
        //這個和apache的恰恰相反,具體的原因需要查看源碼才可以理解
        BeanUtils.copyProperties(bean,copyBean);
        System.out.println(copyBean.getUserName());
        System.out.println(copyBean.getPassword());
    }

輸出結(jié)果:

輸出結(jié)果

可見兩者實現(xiàn)的結(jié)果是相同的,但是兩者的效率是不一樣的

而我們在看clone()方法的時候,發(fā)現(xiàn)也是類似的,也可以將對象中的屬性copy到另一個對象的屬性中

新建一個實體類StudentEntity實現(xiàn)Cloneable接口

/**
* @Description:  
* @Author: qxf
* @Date: 2019/2/21 2:22 PM
*/ 
public class StudentEntity implements Cloneable {
    private String userName;
    private String passWord;
    private List<String> list;
    public List<String> getList() {
        return list;
    }
    public void setList(List<String> list) {
        this.list = list;
    }
    public String getUserName() {
        return userName;
    }
    public void setUserName(String userName) {
        this.userName = userName;
    }
    public String getPassWord() {
        return passWord;
    }
    public void setPassWord(String passWord) {
        this.passWord = passWord;
    }
    @Override
    protected Object clone() throws CloneNotSupportedException {
        return super.clone();
    }
}

測試方法

public void testClone(){
        //測試clone方法
        StudentEntity entity = new StudentEntity();
        entity.setUserName("qxf");
        entity.setPassWord("test");
        List<String> list = new ArrayList<>();
        list.add("Test1");
        list.add("Test2");
        list.add("Test3");
        list.add("Test4");
        entity.setList(list);
        try {
            StudentEntity entityClone = (StudentEntity) entity.clone();
            System.out.println(entityClone.getUserName());
            System.out.println(entityClone.getPassWord());
            List<String> entityList = new ArrayList<>();
            entityList = entityClone.getList();
            for (int i=0;i<entityList.size();i++){
                System.out.println(entityList.get(i));
            }
        }catch (Exception e){
            e.printStackTrace();
        }
    }

但是clone()的方法和copyProperties的區(qū)別還有待學(xué)習(xí)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Spring Boot面試題總結(jié)

    Spring Boot面試題總結(jié)

    這篇文章主要介紹了Spring Boot面試題總結(jié),本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-09-09
  • Java找出兩個大數(shù)據(jù)量List集合中的不同元素的方法總結(jié)

    Java找出兩個大數(shù)據(jù)量List集合中的不同元素的方法總結(jié)

    本文將帶大家了解如何快速的找出兩個相似度非常高的List集合里的不同元素。主要通過Java API、List集合雙層遍歷比較不同、借助Map集合查找三種方式,需要的可以參考一下
    2022-10-10
  • Java中的布隆過濾器你真的懂了嗎

    Java中的布隆過濾器你真的懂了嗎

    經(jīng)常會聽到大家說起布隆過濾器,但是很多人都只是聽過名字,卻并不知道其是怎么實現(xiàn)的。下面將詳細介紹一下布隆過濾器,并且使用簡單的代碼演示
    2023-04-04
  • Java listener簡介_動力節(jié)點Java學(xué)院整理

    Java listener簡介_動力節(jié)點Java學(xué)院整理

    這篇文章主要介紹了Java listener簡介,可以用于統(tǒng)計用戶在線人數(shù)等,有興趣的可以了解一下
    2017-07-07
  • Java異步處理機制實例詳解

    Java異步處理機制實例詳解

    本文涉及Java編程中異步處理機制的簡單介紹和一個相關(guān)實例,相信通過這篇文章,大家能對異步處理有更多的了解。
    2017-09-09
  • Java實現(xiàn)Fast DFS、服務(wù)器、OSS上傳功能

    Java實現(xiàn)Fast DFS、服務(wù)器、OSS上傳功能

    這篇文章主要介紹了Java實現(xiàn)Fast DFS、服務(wù)器、OSS上傳功能,在實際的業(yè)務(wù)中,可以根據(jù)客戶的需求設(shè)置不同的文件上傳需求,支持普通服務(wù)器上傳+分布式上傳(Fast DFS)+云服務(wù)上傳OSS(OSS),需要的朋友可以參考下
    2024-04-04
  • Java源碼解析之詳解ReentrantLock

    Java源碼解析之詳解ReentrantLock

    今天給大家?guī)淼氖顷P(guān)于Java并發(fā)的相關(guān)知識,文章圍繞著ReentrantLock源碼展開,文中有非常詳細的介紹及代碼示例,需要的朋友可以參考下
    2021-06-06
  • idea 在springboot中使用lombok插件的方法

    idea 在springboot中使用lombok插件的方法

    這篇文章主要介紹了idea 在springboot中使用lombok的相關(guān)資料,通過代碼給大家介紹在pom.xml中引入依賴的方法,本文給大家介紹的非常詳細,需要的朋友可以參考下
    2021-08-08
  • hadoop分布式環(huán)境搭建過程

    hadoop分布式環(huán)境搭建過程

    這篇文章主要介紹了hadoop分布式環(huán)境搭建過程,本文圖文并茂給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-09-09
  • Eclipse+Java+Swing+Mysql實現(xiàn)工資管理系統(tǒng)

    Eclipse+Java+Swing+Mysql實現(xiàn)工資管理系統(tǒng)

    這篇文章主要介紹了Eclipse+Java+Swing+Mysql實現(xiàn)工資管理系統(tǒng),對正在工作或者學(xué)習(xí)的你有一定的參考價值,需要的朋友可以參考一下
    2022-01-01

最新評論

桑植县| 奉节县| 枞阳县| 邹城市| 穆棱市| 正阳县| 清水县| 平潭县| 常宁市| 永胜县| 平塘县| 汉沽区| 高雄市| 前郭尔| 乳源| 东光县| 霍州市| 湖南省| 巧家县| 府谷县| 靖西县| 横峰县| 盖州市| 兴海县| 琼海市| 湖北省| 孙吴县| 香河县| 荔波县| 鄱阳县| 灵武市| 遵义县| 鹤岗市| 温宿县| 铅山县| 高雄市| 资兴市| 格尔木市| 同仁县| 枝江市| 富蕴县|