设为首页 收藏本站
查看: 1324|回复: 0

[Cloudstack] BeanUtils.copyProperties()的用法

[复制链接]

尚未签到

发表于 2015-10-14 09:17:23 | 显示全部楼层 |阅读模式
  BeanUtils提供对Java反射和自省API的包装。其主要目的是利用反射机制对JavaBean的属性进行处理。我们知道,一个JavaBean通常包含了大量的属性,很多情况下,对JavaBean的处理导致大量get/set代码堆积,增加了代码长度和阅读代码的难度。
  下面通过代码来理解BeanUtils
  首先创建两个类
  Person.java
[java] view plaincopy

  • package com.org;

  • import java.util.Date;

  • public class Person {
  •     private String name;
  •     private String sex;
  •     private int age;
  •     private Date birthday;

  •     public String getName() {
  •         return name;
  •     }

  •     public void setName(String name) {
  •         this.name = name;
  •     }

  •     public String getSex() {
  •         return sex;
  •     }

  •     public void setSex(String sex) {
  •         this.sex = sex;
  •     }

  •     public int getAge() {
  •         return age;
  •     }

  •     public void setAge(int age) {
  •         this.age = age;
  •     }

  •     public Date getBirthday() {
  •         return birthday;
  •     }

  •     public void setBirthday(Date birthday) {
  •         this.birthday = birthday;
  •     }


  • }
[java] view plaincopy

  • package com.org;

  • import java.util.Date;

  • public class Person {
  •     private String name;
  •     private String sex;
  •     private int age;
  •     private Date birthday;

  •     public String getName() {
  •         return name;
  •     }

  •     public void setName(String name) {
  •         this.name = name;
  •     }

  •     public String getSex() {
  •         return sex;
  •     }

  •     public void setSex(String sex) {
  •         this.sex = sex;
  •     }

  •     public int getAge() {
  •         return age;
  •     }

  •     public void setAge(int age) {
  •         this.age = age;
  •     }

  •     public Date getBirthday() {
  •         return birthday;
  •     }

  •     public void setBirthday(Date birthday) {
  •         this.birthday = birthday;
  •     }


  • }

Student.java[java] view plaincopy

  • package com.org;

  • import java.util.Date;

  • public class Student {
  •     private String name;
  •     private int age;
  •     private String address;
  •     private Date birthday;

  •     public String getName() {
  •         return name;
  •     }
  •     public void setName(String name) {
  •         this.name = name;
  •     }
  •     public int getAge() {
  •         return age;
  •     }
  •     public void setAge(int age) {
  •         this.age = age;
  •     }
  •     public String getAddress() {
  •         return address;
  •     }
  •     public void setAddress(String address) {
  •         this.address = address;
  •     }
  •     public Date getBirthday() {
  •         return birthday;
  •     }
  •     public void setBirthday(Date birthday) {
  •         this.birthday = birthday;
  •     }


  • }
[java] view plaincopy

  • package com.org;

  • import java.util.Date;

  • public class Student {
  •     private String name;
  •     private int age;
  •     private String address;
  •     private Date birthday;

  •     public String getName() {
  •         return name;
  •     }
  •     public void setName(String name) {
  •         this.name = name;
  •     }
  •     public int getAge() {
  •         return age;
  •     }
  •     public void setAge(int age) {
  •         this.age = age;
  •     }
  •     public String getAddress() {
  •         return address;
  •     }
  •     public void setAddress(String address) {
  •         this.address = address;
  •     }
  •     public Date getBirthday() {
  •         return birthday;
  •     }
  •     public void setBirthday(Date birthday) {
  •         this.birthday = birthday;
  •     }


  • }

测试类  BeanUtilTest.java[java] view plaincopy

  • package com.org;

  • import java.lang.reflect.InvocationTargetException;
  • import java.util.Date;

  • //import com.sun.org.apache.commons.beanutils.BeanUtils;

  • import org.apache.commons.beanutils.BeanUtils;

  • public class BeanUtilTest {
  •     public static void main(String[] args) {
  •         Person per = new Person();
  •         Student stu = new Student();

  •         per.setName("zhangsan");
  •         per.setSex("男");
  •         per.setAge(20);
  •         per.setBirthday(new Date());

  •         stu.setName("wuangwu");
  •         stu.setAddress("北京市");
  •         try {
  •             BeanUtils.copyProperties(stu, per);

  •         } catch (IllegalAccessException e) {
  •             // TODO Auto-generated catch block
  •             e.printStackTrace();
  •         } catch (InvocationTargetException e) {
  •             // TODO Auto-generated catch block
  •             e.printStackTrace();
  •         }
  •         System.out.println(stu.getName());
  •         System.out.println(stu.getAge());
  •         System.out.println(stu.getAddress());
  •         System.out.println(stu.getBirthday());

  •     }
  • }
[java] view plaincopy

  • package com.org;

  • import java.lang.reflect.InvocationTargetException;
  • import java.util.Date;

  • //import com.sun.org.apache.commons.beanutils.BeanUtils;

  • import org.apache.commons.beanutils.BeanUtils;

  • public class BeanUtilTest {
  •     public static void main(String[] args) {
  •         Person per = new Person();
  •         Student stu = new Student();

  •         per.setName("zhangsan");
  •         per.setSex("男");
  •         per.setAge(20);
  •         per.setBirthday(new Date());

  •         stu.setName("wuangwu");
  •         stu.setAddress("北京市");
  •         try {
  •             BeanUtils.copyProperties(stu, per);

  •         } catch (IllegalAccessException e) {
  •             // TODO Auto-generated catch block
  •             e.printStackTrace();
  •         } catch (InvocationTargetException e) {
  •             // TODO Auto-generated catch block
  •             e.printStackTrace();
  •         }
  •         System.out.println(stu.getName());
  •         System.out.println(stu.getAge());
  •         System.out.println(stu.getAddress());
  •         System.out.println(stu.getBirthday());

  •     }
  • }

程序输出结果为:[plain] view plaincopy

  • zhangsan
  • 20
  • 北京市
  • Fri Nov 25 13:03:29 CST 2011
[plain] view plaincopy

  • zhangsan
  • 20
  • 北京市
  • Fri Nov 25 13:03:29 CST 2011

可见Student自己设置的值都被Person给覆盖了   再做下面两个测试
  把Person中的setName和setAge 改为setname  setage程序输出结果为
[plain] view plaincopy

  • zhangsan
  • 20
  • 北京市
  • Fri Nov 25 13:08:34 CST 2011
[plain] view plaincopy

  • zhangsan
  • 20
  • 北京市
  • Fri Nov 25 13:08:34 CST 2011

结果没有改变  而如果改为setNAme, setAGe结果为:
[plain] view plaincopy

  • wuangwu
  • 0
  • 北京市
  • Fri Nov 25 13:10:25 CST 2011
[plain] view plaincopy

  • wuangwu
  • 0
  • 北京市
  • Fri Nov 25 13:10:25 CST 2011

我们发现结果改变了  内容没有被覆盖
  注: 当我们加载BeanUtils类时 可能会报如下错误
[java] view plaincopy

  • Exception in thread "main" java.lang.ExceptionInInitializerError
  •     at com.org.BeanUtilTest.main(BeanUtilTest.java:101)
  • 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))
  •     at com.sun.org.apache.commons.logging.impl.LogFactoryImpl.newInstance(LogFactoryImpl.java:543)
  •     at com.sun.org.apache.commons.logging.impl.LogFactoryImpl.getInstance(LogFactoryImpl.java:235)
  •     at com.sun.org.apache.commons.logging.impl.LogFactoryImpl.getInstance(LogFactoryImpl.java:209)
  •     at com.sun.org.apache.commons.logging.LogFactory.getLog(LogFactory.java:351)
  •     at com.sun.org.apache.commons.beanutils.BeanUtils.<clinit>(BeanUtils.java:111)
  •     ... 1 more
  • Caused by: com.sun.org.apache.commons.logging.LogConfigurationException: java.lang.NullPointerException (Caused by java.lang.NullPointerException)
  •     at com.sun.org.apache.commons.logging.impl.LogFactoryImpl.getLogConstructor(LogFactoryImpl.java:397)
  •     at com.sun.org.apache.commons.logging.impl.LogFactoryImpl.newInstance(LogFactoryImpl.java:529)
  •     ... 5 more
  • Caused by: java.lang.NullPointerException
  •     at com.sun.org.apache.commons.logging.impl.LogFactoryImpl.getLogConstructor(LogFactoryImpl.java:374)
  •     ... 6 more
[java] view plaincopy

  • Exception in thread &quot;main&quot; java.lang.ExceptionInInitializerError
  •     at com.org.BeanUtilTest.main(BeanUtilTest.java:101)
  • 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))
  •     at com.sun.org.apache.commons.logging.impl.LogFactoryImpl.newInstance(LogFactoryImpl.java:543)
  •     at com.sun.org.apache.commons.logging.impl.LogFactoryImpl.getInstance(LogFactoryImpl.java:235)
  •     at com.sun.org.apache.commons.logging.impl.LogFactoryImpl.getInstance(LogFactoryImpl.java:209)
  •     at com.sun.org.apache.commons.logging.LogFactory.getLog(LogFactory.java:351)
  •     at com.sun.org.apache.commons.beanutils.BeanUtils.<clinit>(BeanUtils.java:111)
  •     ... 1 more
  • Caused by: com.sun.org.apache.commons.logging.LogConfigurationException: java.lang.NullPointerException (Caused by java.lang.NullPointerException)
  •     at com.sun.org.apache.commons.logging.impl.LogFactoryImpl.getLogConstructor(LogFactoryImpl.java:397)
  •     at com.sun.org.apache.commons.logging.impl.LogFactoryImpl.newInstance(LogFactoryImpl.java:529)
  •     ... 5 more
  • Caused by: java.lang.NullPointerException
  •     at com.sun.org.apache.commons.logging.impl.LogFactoryImpl.getLogConstructor(LogFactoryImpl.java:374)
  •     ... 6 more

产生错误的原因是引入的包不对,应引入import org.apache.commons.beanutils.BeanUtils;  而不应是import com.sun.org.apache.commons.beanutils.BeanUtils;
  另外所需jar包为:
  commons-beanutils-1.8.3.jar
  commons-logging-1.1.1.jar
  还有一个很邪门的问题 实在令我不解
  就是如果把Person,Student 测试类写在一起的话  会产生问题
  类&#20284;与这样的结构
[java] view plaincopy

  • class Person{
  •     .....
  • }
  • class Student{
  •     .....
  • }

  • public class BeanUtilTest {
  •     public static void main(String[] args) {
  •         ......
  •     }
  • }

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-126486-1-1.html 上篇帖子: 【Android】缩略图Thumbnails 下篇帖子: spring annotation 第二版
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表