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

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

    下面通过代码来理解BeanUtils

    首先创建两个类

    Person.java

    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
    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
    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());
    		
    	}
    }
    

    程序输出结果为:
    zhangsan
    20
    北京市
    Fri Nov 25 13:03:29 CST 2011

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

    再做下面两个测试

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

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

    结果没有改变

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

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

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

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

    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
    

    产生错误的原因是引入的包不对,应引入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 测试类写在一起的话  会产生问题

    类似与这样的结构

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

     

    出现不了我们所需要的结果,郁闷中....


    万一在里面碰到大牛了呢?欢迎加入群:74955800


  • 相关阅读:
    C#根据用户输入字符串,输出大写字母有几个,小写字母有几个
    C#把大写英文变成小写英文,把小写英文变成大写英文
    C#中去除字符串里的多个空格且保留一个空格
    工作中遇到的99%SQL优化,这里都能给你解决方案(二)
    MySQL如何选择合适的索引
    工作中遇到的99%SQL优化,这里都能给你解决方案
    周期性线程池与主要源码解析
    Mysql关键字Explain 性能优化神器
    Mysql Explain详解
    Executor线程池只看这一篇就够了
  • 原文地址:https://www.cnblogs.com/itmyhome/p/4131595.html
Copyright © 2011-2022 走看看