zoukankan      html  css  js  c++  java
  • BeanUtils.copyProperties()的用法

    BeanUtils提供对Java反射和自省API的包装。其主要目的是利用反射机制对JavaBean的属性进行处理。我们知道,一个JavaBean通常包含了大量的属性,很多情况下,对JavaBean的处理导致大量get/set代码堆积,增加了代码长度和阅读代码的难度。

    下面通过代码来理解BeanUtils

    首先创建两个类

    Person.java

    1. package com.org;  
    2.   
    3. import java.util.Date;  
    4.   
    5. public class Person {  
    6.     private String name;  
    7.     private String sex;  
    8.     private int age;  
    9.     private Date birthday;  
    10.   
    11.     public String getName() {  
    12.         return name;  
    13.     }  
    14.   
    15.     public void setName(String name) {  
    16.         this.name = name;  
    17.     }  
    18.   
    19.     public String getSex() {  
    20.         return sex;  
    21.     }  
    22.   
    23.     public void setSex(String sex) {  
    24.         this.sex = sex;  
    25.     }  
    26.   
    27.     public int getAge() {  
    28.         return age;  
    29.     }  
    30.   
    31.     public void setAge(int age) {  
    32.         this.age = age;  
    33.     }  
    34.   
    35.     public Date getBirthday() {  
    36.         return birthday;  
    37.     }  
    38.   
    39.     public void setBirthday(Date birthday) {  
    40.         this.birthday = birthday;  
    41.     }  
    42.       
    43.   
    44. }  


    Student.java

    1. package com.org;  
    2.   
    3. import java.util.Date;  
    4.   
    5. public class Student {  
    6.     private String name;  
    7.     private int age;  
    8.     private String address;  
    9.     private Date birthday;  
    10.       
    11.     public String getName() {  
    12.         return name;  
    13.     }  
    14.     public void setName(String name) {  
    15.         this.name = name;  
    16.     }  
    17.     public int getAge() {  
    18.         return age;  
    19.     }  
    20.     public void setAge(int age) {  
    21.         this.age = age;  
    22.     }  
    23.     public String getAddress() {  
    24.         return address;  
    25.     }  
    26.     public void setAddress(String address) {  
    27.         this.address = address;  
    28.     }  
    29.     public Date getBirthday() {  
    30.         return birthday;  
    31.     }  
    32.     public void setBirthday(Date birthday) {  
    33.         this.birthday = birthday;  
    34.     }  
    35.       
    36.       
    37. }  


    测试类  BeanUtilTest.java

    1. package com.org;  
    2.   
    3. import java.lang.reflect.InvocationTargetException;  
    4. import java.util.Date;  
    5.   
    6. //import com.sun.org.apache.commons.beanutils.BeanUtils;  
    7.   
    8. import org.apache.commons.beanutils.BeanUtils;  
    9.   
    10. public class BeanUtilTest {  
    11.     public static void main(String[] args) {  
    12.         Person per = new Person();  
    13.         Student stu = new Student();  
    14.           
    15.         per.setName("zhangsan");  
    16.         per.setSex("男");  
    17.         per.setAge(20);  
    18.         per.setBirthday(new Date());  
    19.           
    20.         stu.setName("wuangwu");  
    21.         stu.setAddress("北京市");  
    22.         try {  
    23.             BeanUtils.copyProperties(stu, per);  
    24.               
    25.         } catch (IllegalAccessException e) {  
    26.             // TODO Auto-generated catch block  
    27.             e.printStackTrace();  
    28.         } catch (InvocationTargetException e) {  
    29.             // TODO Auto-generated catch block  
    30.             e.printStackTrace();  
    31.         }  
    32.         System.out.println(stu.getName());  
    33.         System.out.println(stu.getAge());  
    34.         System.out.println(stu.getAddress());  
    35.         System.out.println(stu.getBirthday());  
    36.           
    37.     }  
    38. }  


    程序输出结果为:

    [plain] view plaincopy
    1. zhangsan  
    2. 20  
    3. 北京市  
    4. Fri Nov 25 13:03:29 CST 2011  


    可见Student自己设置的值都被Person给覆盖了 

    再做下面两个测试

    把Person中的setName和setAge 改为setname  setage程序输出结果为

    [plain] view plaincopy
    1. zhangsan  
    2. 20  
    3. 北京市  
    4. Fri Nov 25 13:08:34 CST 2011  


    结果没有改变

    而如果改为setNAme, setAGe结果为:

    [plain] view plaincopy
    1. wuangwu  
    2. 0  
    3. 北京市  
    4. Fri Nov 25 13:10:25 CST 2011  


    我们发现结果改变了  内容没有被覆盖

    注: 当我们加载BeanUtils类时 可能会报如下错误

      1. Exception in thread "main" java.lang.ExceptionInInitializerError  
      2.     at com.org.BeanUtilTest.main(BeanUtilTest.java:101)  
      3. Caused by: com.sun.org.apache.commons.logging.LogConfigurationException: com.sun.org.apache.commons.logging.LogConfigurationException: java.lang.NullPointerException (Caused by java.lang.NullPointerException) (Caused by com.sun.org.apache.commons.logging.LogConfigurationException: java.lang.NullPointerException (Caused by java.lang.NullPointerException))  
      4.     at com.sun.org.apache.commons.logging.impl.LogFactoryImpl.newInstance(LogFactoryImpl.java:543)  
      5.     at com.sun.org.apache.commons.logging.impl.LogFactoryImpl.getInstance(LogFactoryImpl.java:235)  
      6.     at com.sun.org.apache.commons.logging.impl.LogFactoryImpl.getInstance(LogFactoryImpl.java:209)  
      7.     at com.sun.org.apache.commons.logging.LogFactory.getLog(LogFactory.java:351)  
      8.     at com.sun.org.apache.commons.beanutils.BeanUtils.<clinit>(BeanUtils.java:111)  
      9.     ... 1 more  
      10. Caused by: com.sun.org.apache.commons.logging.LogConfigurationException: java.lang.NullPointerException (Caused by java.lang.NullPointerException)  
      11.     at com.sun.org.apache.commons.logging.impl.LogFactoryImpl.getLogConstructor(LogFactoryImpl.java:397)  
      12.     at com.sun.org.apache.commons.logging.impl.LogFactoryImpl.newInstance(LogFactoryImpl.java:529)  
      13.     ... 5 more  
      14. Caused by: java.lang.NullPointerException  
      15.     at com.sun.org.apache.commons.logging.impl.LogFactoryImpl.getLogConstructor(LogFactoryImpl.java:374)  
      16.     ... 6 more  
  • 相关阅读:
    金融市场的初步了解
    今天参加了一个猎头实践
    前端面试
    web前端 浏览器私有前缀
    背景渐变
    移动web开发之响应式开发
    移动WEB开发之rem适配布局
    flex布局
    常见快捷方式
    virtual
  • 原文地址:https://www.cnblogs.com/suifengbingzhu/p/2662649.html
Copyright © 2011-2022 走看看