//從數據庫中查詢出當前訂單,並加鎖
OrderDetail orderDetail = orderDetailDao.queryForLock();
//copy一個新的訂單模型
OrderDetail newOrderDetail = new OrderDetail();
BeanUtils.copyProperties(orderDetail, newOrderDetail);
//對新的訂單模型進行修改邏輯操作
newOrderDetail.update();
//使用修改前的訂單模型和修改後的訂單模型組裝出訂單變更流水
OrderDetailStream orderDetailStream = new OrderDetailStream();
orderDetailStream.create(orderDetail, newOrderDetail);
2、深拷貝:對基本數據類型進行值傳遞,對引用數據類型,創建一個新的對象,並複製其內容,此爲深拷貝。
我們舉個實際例子,來看下爲啥我說BeanUtils.copyProperties的過程是淺拷貝。
public class Address {
private String province;
private String city;
private String area;
//省略構造函數和setter/getter
}
class User {
private String name;
private String password;
private Address address;
//省略構造函數和setter/getter
}
User user = new User("Hollis", "hollischuang");
user.setAddress(new Address("zhejiang", "hangzhou", "binjiang"));
User newUser = new User();
BeanUtils.copyProperties(user, newUser);
System.out.println(user.getAddress() == newUser.getAddress());
newUser.getAddress().setCity("shanghai");
System.out.println(JSON.toJSONString(user));
System.out.println(JSON.toJSONString(newUser));
{"address":{"area":"binjiang","city":"shanghai","province":"zhejiang"},"name":"Hollis","password":"hollischuang"}
{"address":{"area":"binjiang","city":"shanghai","province":"zhejiang"},"name":"Hollis","password":"hollischuang"}
public class Address implements Cloneable{
private String province;
private String city;
private String area;
//省略構造函數和setter/getter
@Override
public Object clone() throws CloneNotSupportedException {
return super.clone();
}
}
class User implements Cloneable{
private String name;
private String password;
private Address address;
//省略構造函數和setter/getter
@Override
protected Object clone() throws CloneNotSupportedException {
User user = (User)super.clone();
user.setAddress((Address)address.clone());
return user;
}
}
User newUser = JSON.parseObject(JSON.toJSONString(user), User.class);
class User implements Serializable
class Address implements Serializable
User newUser = (User) SerializationUtils.clone(user);
推薦閱讀:
喜歡我可以給我設爲星標哦
本文分享自微信公衆號 - 漫話編程(mhcoding)。
如有侵權,請聯繫 [email protected] 刪除。
本文參與“OSC源創計劃”,歡迎正在閱讀的你也加入,一起分享。