在使用org.springframework.beans.BeanUtils.copyproperty()複製對象的屬性值的時候,一個爲null的值,複製後的新對象的屬性有值了,查看變量值的時候,發現是把之前對象的值賦值給了新對象(相同的對象引用是誤導定位問題的主要因素)。
源對象:
新對象:
注意此時的id爲182,對應值的引用是@13502
新對象的屬性值來源:
這個id是259,對應的值的引用也是@13502
爲了找原因,打斷點進BeanUtils.copyproperty()方法,在賦值的時候,發現屬性值和get方法獲取到的數據不一致
找到get方法
最後找到get方法,的確是被重寫了。
原因:因爲該項目的setter、getter方法都用lombok插件自動生成,所以沒想到重寫方法的情況。後來瞭解到,之所以重寫get方法,是爲了兼容舊數據。對於這種情況,我一般的做法是:如果這個實體類的用途,還有除了展示數據外的用途,最好還是把兼容舊數據的邏輯寫在業務代碼裏。