一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - 聊聊BeanUtils.copyProperties和clone()方法的區別

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

2021-12-13 13:32101之歌 Java教程

這篇文章主要介紹了聊聊BeanUtils.copyProperties和clone()方法的區別,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

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

首先,BeanUtils有兩種:

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

效率:

傳統的set/get>spring的>apache的

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

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

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

?
1
2
3
4
5
6
7
8
9
10
<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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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類相同

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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方法

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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();
        }
    }

執行結果

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

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

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

?
1
2
3
4
5
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-beans</artifactId>
    <version>5.0.7.RELEASE</version>
</dependency>

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

Main方法

?
1
2
3
4
5
6
7
8
9
10
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());
    }

輸出結果:

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

可見兩者實現的結果是相同的,但是兩者的效率是不一樣的

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

新建一個實體類StudentEntity實現Cloneable接口

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
/**
* @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();
    }
}

測試方法

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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的區別還有待學習

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持服務器之家。

原文鏈接:https://blog.csdn.net/qxf1374268/article/details/88125837

延伸 · 閱讀

精彩推薦
  • Java教程xml與Java對象的轉換詳解

    xml與Java對象的轉換詳解

    這篇文章主要介紹了xml與Java對象的轉換詳解的相關資料,需要的朋友可以參考下...

    Java教程網2942020-09-17
  • Java教程Java BufferWriter寫文件寫不進去或缺失數據的解決

    Java BufferWriter寫文件寫不進去或缺失數據的解決

    這篇文章主要介紹了Java BufferWriter寫文件寫不進去或缺失數據的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望...

    spcoder14552021-10-18
  • Java教程Java8中Stream使用的一個注意事項

    Java8中Stream使用的一個注意事項

    最近在工作中發現了對于集合操作轉換的神器,java8新特性 stream,但在使用中遇到了一個非常重要的注意點,所以這篇文章主要給大家介紹了關于Java8中S...

    阿杜7482021-02-04
  • Java教程升級IDEA后Lombok不能使用的解決方法

    升級IDEA后Lombok不能使用的解決方法

    最近看到提示IDEA提示升級,尋思已經有好久沒有升過級了。升級完畢重啟之后,突然發現好多錯誤,本文就來介紹一下如何解決,感興趣的可以了解一下...

    程序猿DD9332021-10-08
  • Java教程Java使用SAX解析xml的示例

    Java使用SAX解析xml的示例

    這篇文章主要介紹了Java使用SAX解析xml的示例,幫助大家更好的理解和學習使用Java,感興趣的朋友可以了解下...

    大行者10067412021-08-30
  • Java教程Java實現搶紅包功能

    Java實現搶紅包功能

    這篇文章主要為大家詳細介紹了Java實現搶紅包功能,采用多線程模擬多人同時搶紅包,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙...

    littleschemer13532021-05-16
  • Java教程20個非常實用的Java程序代碼片段

    20個非常實用的Java程序代碼片段

    這篇文章主要為大家分享了20個非常實用的Java程序片段,對java開發項目有所幫助,感興趣的小伙伴們可以參考一下 ...

    lijiao5352020-04-06
  • Java教程小米推送Java代碼

    小米推送Java代碼

    今天小編就為大家分享一篇關于小米推送Java代碼,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧...

    富貴穩中求8032021-07-12
主站蜘蛛池模板: 我的青梅竹马是消防员2季未增删免费 | 久久久久国产一级毛片高清片 | 日本中文字幕一区二区有码在线 | 婷婷伊人综合亚洲综合网 | 青青热久久综合网伊人 | 调教车文 | 久久综合久综合久久鬼色 | 午夜免费无码福利视频麻豆 | 娇小性色 | 高清免费毛片 | 日本特黄一级午夜剧场毛片 | 天天躁天天碰天天看 | 成全动漫视频在线观看 | 欧美日韩视频在线一区二区 | 欧美日韩国产在线人成dvd | 午夜五月天 | 手机看片一区二区 | 高清视频在线播放ww | 亚洲H成年动漫在线观看不卡 | 国产精品视频免费看 | 日韩视频免费 | 给我免费观看的视频在线播放 | 欧美在线国产 | 亚洲系列国产系列 | 激情综合色啪啪小说 | 国产一区二区三区丶四区 | 涩情主播在线翻车 | 91大神大战高跟丝袜美女 | 久久视频精品3线视频在线观看 | 日本高清在线精品一区二区三区 | 国产永久在线观看 | 秋霞理论一级在线观看手机版 | 日韩欧美推理片免费在线播放 | 亚洲欧美专区精品伊人久久 | 国产aaaaa一级毛片 | 韩国三级理韩国三级理人伦 | 欧美性bbbbbxxxxxddd| 色综合久久最新中文字幕 | 日韩一区国产二区欧美三 | 美女免费观看一区二区三区 | 免费成年网站 |