1. 程式人生 > >BeanUtils和Cglib的Java Bean屬性copy功能的效能比較

BeanUtils和Cglib的Java Bean屬性copy功能的效能比較

以前將Struts中的ActionForm的屬性Copy到對應的Hibernate 實體類時,我用的是BeanUtils,覺得其功能還可以,前幾天學習cglib時發現它也有個bean copy的功能,所以想將他們兩的效能作個比較,就寫了一個較簡單的測試用例,不比不知道,一比嚇一跳,看來cglib的表現確實不凡呀
package com.redbeans.test;

import java.lang.reflect.InvocationTargetException;

import junit.framework.TestCase;
import net.sf.cglib.beans.BeanCopier;

import org.apache.commons.beanutils.BeanUtils;

public class BeanCopyTest extends TestCase {


     class Bean01 {
        /** identifier field */
        private long personId;

        /** persistent field */
        private String username;

        /** persistent field */
        private String password;

        /** nullable persistent field */
        private String gender;

        /** nullable persistent field */
        private String email;

        /** nullable persistent field */
        private String address;

        /** nullable persistent field */
        private String postcode;

        public String getAddress() {
            return address;
        }

        public void setAddress(String address) {
            this.address = address;
        }

        public String getEmail() {
            return email;
        }

        public void setEmail(String email) {
            this.email = email;
        }

        public String getGender() {
            return gender;
        }

        public void setGender(String gender) {
            this.gender = gender;
        }

        public String getPassword() {
            return password;
        }

        public void setPassword(String password) {
            this.password = password;
        }

        public long getPersonId() {
            return personId;
        }

        public void setPersonId(long personId) {
            this.personId = personId;
        }

        public String getPostcode() {
            return postcode;
        }

        public void setPostcode(String postcode) {
            this.postcode = postcode;
        }

        public String getUsername() {
            return username;
        }

        public void setUsername(String username) {
            this.username = username;
        }
       
    }
   
    class Bean02 {
        /** identifier field */
        private long personId;

        /** persistent field */
        private String username;

        /** persistent field */
        private String password;

        /** nullable persistent field */
        private String realName;

        /** nullable persistent field */
        private String gender;

        /** nullable persistent field */
        private double height;

        /** nullable persistent field */
        private double weight;

        /** nullable persistent field */
        private int status;

        /** nullable persistent field */
        private String telephone;

        /** nullable persistent field */
        private String email;

        /** nullable persistent field */
        private String address;

        /** nullable persistent field */
        private String postcode;

        public String getAddress() {
            return address;
        }

        public void setAddress(String address) {
            this.address = address;
        }

        public String getEmail() {
            return email;
        }

        public void setEmail(String email) {
            this.email = email;
        }

        public String getGender() {
            return gender;
        }

        public void setGender(String gender) {
            this.gender = gender;
        }

        public double getHeight() {
            return height;
        }

        public void setHeight(double height) {
            this.height = height;
        }

        public String getPassword() {
            return password;
        }

        public void setPassword(String password) {
            this.password = password;
        }

        public long getPersonId() {
            return personId;
        }

        public void setPersonId(long personId) {
            this.personId = personId;
        }

        public String getPostcode() {
            return postcode;
        }

        public void setPostcode(String postcode) {
            this.postcode = postcode;
        }

        public String getRealName() {
            return realName;
        }

        public void setRealName(String realName) {
            this.realName = realName;
        }

        public int getStatus() {
            return status;
        }

        public void setStatus(int status) {
            this.status = status;
        }

        public String getTelephone() {
            return telephone;
        }

        public void setTelephone(String telephone) {
            this.telephone = telephone;
        }

        public String getUsername() {
            return username;
        }

        public void setUsername(String username) {
            this.username = username;
        }

        public double getWeight() {
            return weight;
        }

        public void setWeight(double weight) {
            this.weight = weight;
        }
       
    }
    public void testCglib() {

        Bean01 bean01 = new Bean01();
        bean01.setAddress("test");
        bean01.setUsername("bean01");
        Bean02 bean02 = new Bean02();
        for (int i = 0; i < 10000; i++) {
            BeanCopier copier = BeanCopier.create(Bean01.class, Bean02.class,
                    false);
            copier.copy(bean01, bean02, null);

        }
    }

    public void testBeanUtils() {
        Bean01 bean01 = new Bean01();
        bean01.setAddress("test");
        bean01.setUsername("bean01");
        Bean02 bean02 = new Bean02();
        for (int i = 0; i < 10000; i++) {
            try {
                BeanUtils.copyProperties(bean02, bean01);
            } catch (IllegalAccessException e) {

                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (InvocationTargetException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }

}

相關推薦

BeanUtilsCglib的Java Bean屬性copy功能效能比較

以前將Struts中的ActionForm的屬性Copy到對應的Hibernate 實體類時,我用的是BeanUtils,覺得其功能還可以,前幾天學習cglib時發現它也有個bean copy的功能,所以想將他們兩的效能作個比較,就寫了一個較簡單的測試用例,不比不知道,一比嚇

synchronizedAtomicInteger解決併發問題的效能比較

轉自:http://blog.csdn.net/ufo2910628/article/details/39473059 AtomicInteger,一個提供原子操作的Integer的類。在Java語言中,++i和i++操作並不是執行緒安全的,在使用的時候,不可避免的會用到synchronized關鍵字。

cglib、orika、spring等bean copy工具效能測試原理分析

# 簡介 在實際專案中,考慮到不同的資料使用者,我們經常要處理 VO、DTO、Entity、DO 等物件的轉換,如果手動編寫 setter/getter 方法一個個賦值,將非常繁瑣且難維護。通常情況下,這類轉換都是同名屬性的轉換(型別可以不同),我們更多地會使用 bean copy 工具,例如 Apache

ArcEngine10.2設計與開發課程學習(作業二)——基本應用程式生成,右擊選單實現:顯示、移除開啟屬性功能

前言:這裡是我的筆記本 目錄: 準備工作——工具方法等 程式碼   首先說明一下第一個作業,這是第二個的連結:https://pan.baidu.com/s/1NziPHoMEJx0vc8DCNrX-dA提取碼:qpee 看的時候希望能夠靜下心來看,不要著急

spring-boot 屬性定義配置bean

自定義bean屬性 1.定義bean屬性 // 通過@ConfigurationProperties載入properties檔案內的配置, // 通過prefix屬性指定properties的配置的字首,通過locations指定properties檔案的位置 @ConfigurationProperti

Spring的BeanUtils.copyProperties()在複製屬性時忽略null值empty集合

       今天在寫專案介面的時候需要把DTO類中的值更新到Bean中,發現DTO類中有一個集合屬性children的大小是0,而我從資料庫中查詢出來的Bean,children屬性是有值的。使用的是Spring提供的複製方法BeanUtils.copyProperti

Spring註解驅動開發——設定Bean屬性動態註冊Bean

1、@Scope設定元件作用域 @Configuration public class MainConfigA { @Bean("person") @Scope("singleton") public Person person(){

利用反射判斷bean屬性不為空(null空串)

/** * @param object * @Description 判斷是否位空物件 * @Author vioking * @Date 18-12-26 下午12:12 * @Return boolean */ private boolean isNotNullObject(Object

Bean複製的幾種框架效能比較(Apache BeanUtils、PropertyUtils,Spring BeanUtils,Cglib BeanCopier)

 進行了三次測試,最後的結果如下: 10次測驗 第一次 第二次 第三次 平均值 每次平均值 BeanUtil.copyProperties 54 57 50 53.66667 5.366666667 PropertyUtils.copyProperties 4 4 4 4

spring ioc中例項化bean以及依賴注入bean基本型別屬性簡單實現方案

Spring兩個重要特性IOC和AOP,本文中簡單實現bean的建立以及屬性依賴注入。 實現步驟如下: 1、通過dom4j解析bean.xml檔案,將bean物件以及依賴屬性裝入List。 2、遍歷list,通過反射機制例項化物件。 3、遍歷list,通過反射呼叫bean裡

java:7種Base64編碼解碼功能詳解效能比較

BASE64 編碼是一種常用的字元編碼,在很多地方都會用到。但base64不是安全領域下的加密解密演算法。能起到安全作用的效果很差,而且很容易破解,他核心作用應該是傳輸資料的正確性,有些閘道器或系統只能使用ASCII字元。Base64就是用來將非ASCII字元的資料轉換成ASCII字元的一種方法,而且

BeanUtils(bean屬性-->map; map-->bean屬性)

一、傳遞任意一個JavaBean物件,將該物件中的全部屬性封裝成到HashMap public static Map<String,Object> bean2Map(Object bean

【小家Spring】Spring IoC是如何使用BeanWrapperJava內省結合起來給Bean屬性賦值的

每篇一句 具備了技術深度,遇到問題可以快速定位並從根本上解決。有了技術深度之後,學習其它技術可以更快,再深入其它技術也就不會害怕 相關閱讀 【小家Spring】聊聊Spring中的資料轉換:Converter、ConversionService、TypeConverter、PropertyEditor 【

Java反射設置訪問私有屬性

測試類 username 反射 public 結果 第一個 declare field name 越學習到後面,越感覺java反射機制很重要,必須精通,要不框架那塊比較難自己動手實現,回過頭溫習一下反射機制,查漏補缺 今天嘗試了一下通過反射訪問和設置類的私有屬性(不設置s

區分元素特性attribute對象屬性property

property 元素 其實attribute和property兩個單詞,翻譯出來都是屬性,但是《javascript高級程序設計》將它們翻譯為特性和屬性,以示區分。本文將詳細介紹特性和屬性的不同之處 定義  元素特性attribute是指HTML元素標簽的特性  下面的id、class、title、

23.python中的類屬性實例屬性

ash ron huang ant pass iou cli ict bin %E5%9C%A8myeclipse%E4%B8%AD%E4%BD%BF%E7%94%A8maven%E5%89%8D%E5%B8%B8%E8%A7%81%E9%94%99%E8%AF%AF%E5

MySQL數據類型常用字段屬性總結

mem adding 數組 edi default arch rim 並且 表達 前言 好比C++中,定義int類型需要多少字節,定義double類型需要多少字節一樣,MySQL對表每個列中的數據也會實行嚴格控制,這是數據驅動應用程序成功的關鍵。M前言 好比C++中,定義i

Python中生成器叠代器的功能介紹

family line 介紹 mil auto 叠代器 常用 方法 lean 生成器和叠代器的功能介紹 1. 生成器(generator) 1. 賦值生成器 1. 創建 方法:x = (varia

javascript中數據屬性訪問器屬性

創建 ron 利用 就會 {} 嚴格模式 enum 使用 str 1.屬性   ECMAScript中有兩種屬性:數據屬性和訪問器屬性。   一、數據屬性   數據屬性包含一個數據值的位置,在這個位置可以讀取和寫入值。   var person = { name :"Ni

獲取bean屬性

text ext spring ring get .get gin span bean p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco } span.s1 { color: #7e504f } span