亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

關于BeanUtils.copyProperties() 方法的問題

BeanUtils.copyProperties(obj1,obj2)這個方法難道不是將obj2的值賦給obj1嗎,而老師說最開始加載resource的時候屬性值就會一一對應賦值,而Resource bean = new Resource()中的bean是new出來,應該沒有值,按照老師代碼中的順序BeanUtils.copyProperties(resource,bean)這不是把bean的值賦給resource嗎,那bean中依舊是沒有值的哇?沒明白這個問題。


正在回答

4 回答

這個我看視頻的時候也想到了,然后測試了一下,直接讓return resource;的話會出現錯誤的,不會正確顯示的。你把它toString輸出一下,可以看到自動裝配后的resource是一個完整類名加后面一串類似這樣的東西“$$EnhancerBySpringCGLIB$$9a1fe978@5eef9e0”,這說明它是spring給你生成的一個原來類的動態代理。這個動態代理是不能通過json顯示出來的。

1 回復 有任何疑惑可以回復我~
#1

Henry_Liu

說得對
2018-12-05 回復 有任何疑惑可以回復我~

這個自己測試下就知道了。第一次通過資源文件映射的bean不是標準的Resource類的,帶有其他的屬性,這時候直接返回的話jackson無法轉換,會報錯。所以我們可以看到通過BeanUtils.copyProperties來獲取標準的Resource類的bean,這時候就可以進行json轉換了。

1 回復 有任何疑惑可以回復我~
#1

一個霸氣側漏的名字

謝大佬,我說怎么不能直接返回resource呢(我沒按照老師的打BeanUtils.copyProperties(),所以出錯了還不知道因為啥。。。)
2019-07-07 回復 有任何疑惑可以回復我~

resource是交給Spring創建的單實例對象,在項目啟動時Spring就會按照注解配置給該對象賦值。而new出來的bean對象,雖然與resource使用的同樣的class對象,但卻是不同的加載方式,不會有初始值。

0 回復 有任何疑惑可以回復我~

你可能有些問題沒想明白,我簡單說下問題的關鍵。

首先,老師是創建了資源配置文件,并設置了幾個屬性值,如下圖:

https://img1.sycdn.imooc.com//5b52b25d0001310004860084.jpg

然后在Resource類中通過注解的方式為每個成員變量都讀取設置了上面資源配置文件里的屬性值,如下圖:

https://img1.sycdn.imooc.com//5b52b2c5000191f606020155.jpg

這樣簡單來說,Resource類中定義的成員變量其實都是有值的,效果如下圖:

https://img1.sycdn.imooc.com//5b52b34c0001053006840215.jpg

認真對比上面兩張圖,應該明白了吧,在你new出Resource對象時,其實該對象的每個屬性都是有值的。上面的我個人的淺顯理解,可能敘述不太準確,目前,我也在積極學習中,正好看到你的問題,希望可以幫到你,。

0 回復 有任何疑惑可以回復我~
#1

濸笙 提問者

bean本來就有值了,而他輸出的是bean,那他代碼中屬性值拷貝還有必要嗎?
2018-07-22 回復 有任何疑惑可以回復我~
#2

濸笙 提問者

.....在這里bean是沒有初始值的,而且還有兩個不同的BeanUtils類, 一個為org.springframework.beans.BeanUtils, 另一個是org.apache.commons.beanutils.BeanUtils, 這兩個類在不同的包下面,而這兩個類的copyProperties()方法里面傳遞的參數賦值是相反的。 被這個給迷了
2018-07-22 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

關于BeanUtils.copyProperties() 方法的問題

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號