總結關於BeanUtils拷貝物件遇到的坑

2021-10-09 06:05:08 字數 2090 閱讀 4834

​ 實際開發中經常會用到的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...