BeanUtils和Cglib的Java Bean屬性copy功能的效能比較
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();
}
}
}
}
相關推薦
BeanUtils和Cglib的Java Bean屬性copy功能的效能比較
以前將Struts中的ActionForm的屬性Copy到對應的Hibernate 實體類時,我用的是BeanUtils,覺得其功能還可以,前幾天學習cglib時發現它也有個bean copy的功能,所以想將他們兩的效能作個比較,就寫了一個較簡單的測試用例,不比不知道,一比嚇
synchronized和AtomicInteger解決併發問題的效能比較
轉自: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是如何使用BeanWrapper和Java內省結合起來給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