BeanUtils.copyProperties() 用法


一、簡介:

        BeanUtils提供對Java反射和自省API的包裝。其主要目的是利用反射機制對JavaBean的屬性進行處理。我們知道,一個JavaBean通常包含了大量的屬性,很多情況下,對JavaBean的處理導致大量get/set代碼堆積,增加了代碼長度和閱讀代碼的難度。

二、用法:       

        如果你有兩個具有很多相同屬性的JavaBean,一個很常見的情況就是Struts里的PO對象(持久對象)和對應的ActionForm。例如:一個用戶注冊頁面,有一個User實體類和一個UserActionForm,我們一般會在Action里從ActionForm構造一個PO對象,傳統的方式是使用類似下面的語句對屬性逐個賦值:

Java代碼    收藏代碼
  1. // 獲取 ActionForm 表單數據  
  2.   
  3. UserActionForm uForm = (UserActionForm) form;  
  4.   
  5.   
  6.   
  7. // 構造一個User對象  
  8.   
  9. User user = new User();  
  10.   
  11.   
  12.   
  13. // 逐一賦值  
  14. user.setUsername(uForm.getUsername);  
  15.   
  16. user.setPassword(uForm.getPassword);  
  17.   
  18. user.setAge(uForm.getAge);  
  19.   
  20. ...........  
  21.   
  22.   
  23.   
  24. ...........  
  25.   
  26.   
  27.   
  28. // 然后調用JDBC、或操作Hibernate 持久化對象User到數據庫  
  29.   
  30. ...  

通過這樣的方法如果表單數據N多、100、1000(誇張點。哈哈)、、、、那我們不是要寫100、、、1000行set、get了。誰都不願意這樣做。 

而我們使用 BeanUtils.copyProperties() 方法以后,代碼量大大的減少,而且整體程序看着也簡潔明朗,代碼如下:

Java代碼    收藏代碼
  1. // 獲取 ActionForm 表單數據  
  2.   
  3. UserActionForm uForm = (UserActionForm) form;  
  4.   
  5.    
  6.   
  7. // 構造一個User對象  
  8.   
  9. User user = new User();  
  10.   
  11.   
  12. // 賦值  
  13.   
  14.    
  15.   
  16. BeanUtils.copyProperties(user, uForm);  
  17.   
  18.   
  19.   
  20.   
  21.   
  22. // 然后調用JDBC、或操作Hibernate 持久化對象User到數據庫  
  23.   
  24. ....... 

很方便是吧。

注:如果User和UserActionForm 間存在名稱不相同的屬性,則BeanUtils不對這些屬性進行處理,需要手動處理。例如:

User類里面有個createDate 創建時間字段,而UserActionForm里面無此字段。BeanUtils.copyProperties()不會對此字段做任何處理。必須要自己手動處理。

還有個注意的地方是,貌似UserActionForm里面不能帶有時間類型的屬性,比如Date,Timestamp、、、我調試的時候就會報錯。可能是我技術問題、呵呵。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM