BeanUtils.copyProperties是Apache Commons BeanUtils的一個工具類,用于拷貝兩個JavaBean之間的屬性,簡化了JavaBean對象之間的拷貝代碼。在使用 BeanUtils.copyProperties時需要注意以下幾個問題:
1.參數(shù)類型必須一致
BeanUtils.copyProperties 用于拷貝兩個JavaBean之間的屬性,需要保證參數(shù)的類型一致。如果參數(shù)類型不一致,拷貝過程就無法完成。
2.屬性名稱必須一致
BeanUtils.copyProperties 會拷貝源對象中所有可讀可寫的屬性,但是屬性名稱必須一致,否則目標(biāo)對象中對應(yīng)的屬性將不會被賦值。
3.源對象的屬性必須是可讀的
BeanUtils.copyProperties 需要讀取源對象中的所有屬性,因此源對象的屬性必須是可讀的。
4.目標(biāo)對象的屬性必須是可寫的
BeanUtils.copyProperties 需要將源對象的屬性值賦給目標(biāo)對象的屬性,因此目標(biāo)對象的屬性必須是可寫的。
5.屬性類型必須兼容
BeanUtils.copyProperties 需要將源對象的屬性值轉(zhuǎn)換為目標(biāo)對象的屬性值,因此屬性類型必須是兼容的。如果源對象屬性類型無法轉(zhuǎn)換為目標(biāo)對象屬性類型,拷貝過程就無法完成。
使用方法:
import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.beanutils.PropertyUtils;
public class Main {
public static void main(String[] args) {
SourceBean sourceBean = new SourceBean("sourceName", 20, "source_address");
TargetBean targetBean = new TargetBean();
try {
// 拷貝屬性
BeanUtils.copyProperties(targetBean, sourceBean);
// 拷貝指定屬性
PropertyUtils.copyProperties(targetBean, PropertyUtils.describe(sourceBean));
System.out.println(targetBean);
} catch (Exception e) {
e.printStackTrace();
}
}
}
注意: 此處我們使用了 PropertyUtils.describe 來轉(zhuǎn)換 java bean 為 Map<String,String> ,然后還原回 另一個 bean。 這個工具類是有限制的,它的屬性必須是能夠被 get 方法獲取的。 如果有屬性沒有開放 getter 方法是無法通過這種方式拷貝出來的。