如果两个对象A、B的大部分属性的名字都一样,此时想将A的属性值复制给B,一个一个属性GET\SET代码量太大,可以通过复制属性的方式减小工作量,同时代码看起来更加简洁明了,复制属性可以用Spring或者Commons下的Beanutils.copyProperties方法。这种复制只是简单的浅复制。

1.Spring BeanUtils.copyProperties

public void saveFeedback(CustomerFeedbackTemp customerFeedbackTemp)
 {
       CustomerFeedbackInfo feedBackInfo = new CustomerFeedbackInfo();
       BeanUtils.copyProperties(customerFeedbackTemp,feedBackInfo); 
......
}

上面部分代码将页面传入的CustomerFeedbackTemp对象的属性复制到CustomerFeedbackInfo对象里。方便吧。

 

2.Common BeanUtils.copyProperties

public void saveFeedback(CustomerFeedbackTemp customerFeedbackTemp)
 {
       CustomerFeedbackInfo feedBackInfo = new CustomerFeedbackInfo();
       BeanUtils.copyProperties(feedBackInfo, customerFeedbackTemp);
       ...... 
 } 

用法跟Spring的差不多,只是参数位置不一样。

除BeanUtils外还有一个名为PropertyUtils的工具类,它也提供copyProperties()方法,作用与 BeanUtils的同名方法十分相似,主要的区别在于后者提供类型转换功能,即发现两个JavaBean的同名属性为不同类型时,在支持的数据类型范围内进行转换,而前者不支持这个功能,但是速度会更快一些。BeanUtils支持的转换类型如下:

    * java.lang.BigDecimal
    * java.lang.BigInteger
    * boolean and java.lang.Boolean
    * byte and java.lang.Byte
    * char and java.lang.Character
    * java.lang.Class
    * double and java.lang.Double
    * float and java.lang.Float
    * int and java.lang.Integer
    * long and java.lang.Long
    * short and java.lang.Short
    * java.lang.String
    * java.sql.Date
    * java.sql.Time
    * java.sql.Timestamp 

这里要注意一点,java.util.Date是不被支持的,而它的子类java.sql.Date是被支持的。因此如果对象包含时间类型的属性,且希望被转换的时候,一定要使用java.sql.Date类型。否则在转换时会提示argument mistype异常。