實際開發中經常會用到的beanutils的一些方法,比如copyproperties拷貝物件中的屬性等,樓主在使用的過程中也遇到了一些坑,總結一下,這裡我用到的是spring的beanutils,後面會介紹幾種beanutils的一些效率相關的問題。
話不多說,首先建立兩個物件:
按道理說這樣就可以將test1中的屬性值拷貝到test2中,但是並沒有理所應當的拷貝成功,不服輸的我立馬點進原始碼看看呼叫copyproperties的時候到底做了什麼。
private
static
void
copyproperties
(object source, object target,
@nullable class<
?> editable,
@nullable string.
.. ignoreproperties)
throws bean***ception
actualeditable = editable;
} propertydescriptor[
] targetpds =
getpropertydescriptors
(actualeditable)
; list
ignorelist =
(ignoreproperties != null ? arrays.
aslist
(ignoreproperties)
: null)
;for
(propertydescriptor targetpd : targetpds)
object value = readmethod.
invoke
(source);if
(!modifier.
ispublic
(writemethod.
getdeclaringclass()
.getmodifiers()
))writemethod.
invoke
(target, value);}
catch
(throwable ex)}}}}}
看完原始碼之後才發現當呼叫此方法時是呼叫了test2中的getter和setter方法。於是我給test2中加入了getter和setter方法。
此時拷貝成功!
再來介紹另乙個坑,如果存在屬性相同的內部類,但是屬性不是在同乙個類中,則呼叫copyproperties時不會拷貝屬性值。
@getter
@setter
@accessors
(chain =
true
)public
class
test3
extends
test2
還是以上述建立的test1和test2兩個類為例,如果要拷貝test3這樣的乙個類,因為上述建立test2時候同樣也有這三個字段,此時有三對重複的字段,這樣在呼叫拷貝物件的方法是是不會拷貝的。 各大BeanUtils效能總結
目錄前言 推薦使用 測試 輸出結果 參考文章的測試結果 注意事項 個人總結,僅供參考 這篇文章 首先說下這個類的好處,very big,比如新建的功能,你必須去判斷是不是有數值,然後乙個個去set,浪費很多時間。判斷的話使用 valid即可。可以使用beanutils直接對屬性進行複製,十分方便。至...
用BeanUtils類實現bean的拷貝
為了保證原bean中的資料不為空,需要自己設定轉換器。當執行beanutils.copyproperties dest,src 時會首先去呼叫轉換器 converter介面的實現方法convert 然後再執行轉換.public static void copybean object src,obje...
BeanUtils只拷貝物件非null屬性
在最近做專案的時候,使用到了物件copy,而只需要拷貝源物件的非空屬性,為null的屬性不進行吧copy。而beanutil.copyproperties sourceobject,targetobject 查了資料,解決方法如下 1 hutool開源庫為我們提供了更為強大的bean工具 beanu...