BeanUtils提供對Java反省和自省API的包裝。主要目的是利用反射機制對JavaBean的屬性進行處理。由於一個JavaBean通常會包含較多屬性,很多情況下需要對JavaBean進行處理導致大量get/set代碼堆積,增加了代碼長度和閱讀代碼的難度。
於是BeanUtils.copyProperties(A,B)提供了JavaBean之間的屬性復制。當然這個方法值對於相同屬性之間的復制,當兩個實體中存在不同屬性時,BeanUtils無法對其進行處理,需程序員使用的set()方法進行處理。目前有兩套BeanUtils的jar可以進行復制操作,但是用法不太一樣:
① package org.springframework.beans;
BeanUtils.copyProperties(A,B) --> 是將A中的值賦值給B
② package org.apache.commons.beanutils;(常用)
BeanUtils.copyProperties(A,B) --> 是將B中的值賦值給A
BeanUtils.copyProperties(A,B)針對ArrayList的copy
List<Object> listOrigin (with data) List<Object> listDestination= new ArrayList<Object>(); for (Object source: listOrigin ) { Object target= new Object(); BeanUtils.copyProperties(source , target); listDestination.add(target); }
補充:除BeanUtils外還有一個名為PropertyUtils的工具類,也提供copyProperties(A,B)方法,與BeanUtils的十分相似,但還是有區別的:BeanUtils提供類型轉換功能,即發現兩個JavaBean的同名屬性為不同類型時,在支持的數據類型范圍內進行轉換,而前者不支持這個功能,但是速度會更快一些。
詳情參考:https://www.cnblogs.com/HassanBlog/articles/3200239.html
注意:BeanUtils和PropertyUtils中復制屬性的使用效率都不高,執行時間會很慢。需要謹慎使用。附原理及重寫方案:重寫BeanUtils.copyProperties(復制對象屬性方法)
