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();
            }
        }
    }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值