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


  • 相关阅读:
    Sqlserver 实际开发中表变量的用法
    Python Day 20 面向对象 (面向对象的组合用法,面向对象的三大特性
    Python Day 19 面向对象(初识面向对象)
    Python Day 18 常用模块(模块和包)
    Python Day 17 常用模块(常用模块一 时间模块,random模块,os模块,sys模块,序列化模块)
    Python Day 15 函数(递归函数、二分查找算法)
    Python Day 14 函数(内置函数,匿名函数(lambda表达式))
    Python Day 13 函数(迭代器,生成器,列表推导式,生成器表达式)
    Python Day 11 + Python Day 12 函数(函数名的应用,闭包,装饰器)
    Python Day 10 函数(名称空间,作用域,作用域链,加载顺序等; 函数的嵌套 global,nonlocal)
  • 原文地址:https://www.cnblogs.com/itmyhome/p/4131595.html
Copyright © 2011-2022 走看看