`

commons beanutils之复制Bean属性

阅读更多

commons beanutils之复制Bean属性

 本文来自:http://fhd001.iteye.com/blog/440930

问题
你有两个相同类型的bean的实例,并需要将其中一个bean的属性复制到另一个中去.

 

解决方案
使用PropertyUtils.copyProperties()方法从一个bean复制属性到另一个bean.其中第一个参数
指定目的bean,而第二个参数是源bean:

Book book = new Book();
book.setName("Prelude to Poundation");
book.setAuthorName("Asimov");

Book destinationBook = new Book();
PropertyUtils.copyProperties(destinationBook,book);

PropertyUtils.copyProperties()方法从源bean实例中检索出所有属性的值,然后将
这些值赋给目的的实例中的相应属性.如果上面的示例中Book bean含有一个Author类型
的author属性,copyProperties()将把相同的引用对象赋给目的bean.换句话说,该方法
没有克隆bean属性的值.如例:
Author author = new Author();
author.setName("Zinsser");

Book book = new Book();
book.setName("On Writing well");
book.setAuthor(author);

Book destinationBook = new Book();
PropertyUtils.copyProperties(destionationBook,book);

if(book.getAuthor() == destinationBook.getAuthor()){
 System.out.println("Author objects identical");
}
现在,两个对象中的author属性值都是Author类同一实例的引用.copyProperyties()并没
有复制bean属性的值.

copyProperties()方法还可以将一个Map的内容复制进bean中,前提是Map各键一一对应于目的
bean的各简单属性:
Map mapOrops = HashMap();
mapProps.put("name","The Art of computer rogramming");
mapProps.put("author","Knuth");

Book destinationBook = new Book();
PropertyUtils.copyProperties(destinationBook,mapProps);

演示代码
  1. package test4;  
  2.   
  3. import java.lang.reflect.InvocationTargetException;  
  4. import java.util.HashMap;  
  5. import java.util.Map;  
  6.   
  7. import org.apache.commons.beanutils.PropertyUtils;  
  8.   
  9. /**  
  10.  * commons beanutils之复制Bean属性  
  11.  * @author fhd001  
  12.  */  
  13. public class PropertyUtilsTest7 {  
  14.   
  15.     public static void main(String[] args) {  
  16.   
  17.         /*  
  18.          * 例子1 .  
  19.          */  
  20.         Person p1 = new Person();  
  21.         p1.setAge(12 );  
  22.         p1.setName("fhd" );  
  23.           
  24.         Person p2 = new Person();  
  25.         try {  
  26.             PropertyUtils.copyProperties(p2, p1);  
  27.         } catch (IllegalAccessException e) {  
  28.             e.printStackTrace();  
  29.         } catch (InvocationTargetException e) {  
  30.             e.printStackTrace();  
  31.         } catch (NoSuchMethodException e) {  
  32.             e.printStackTrace();  
  33.         }  
  34.         System.out.println("p2.age: " +p2.getAge()+ "\tp2.name:" +p2.getName());  
  35.           
  36.           
  37.         /*  
  38.          * 例子2 .证明没有克隆bean属性  
  39.          */  
  40.         Person p3 = new Person();  
  41.         p3.setAge(34 );  
  42.         p3.setName("ldh" );  
  43.           
  44.         Book b1 = new Book();  
  45.         b1.setAuthor(p3);  
  46.         b1.setBookName("java" );  
  47.           
  48.         Book b2 = new Book();  
  49.         try {  
  50.             PropertyUtils.copyProperties(b2, b1);  
  51.         } catch (IllegalAccessException e) {  
  52.             e.printStackTrace();  
  53.         } catch (InvocationTargetException e) {  
  54.             e.printStackTrace();  
  55.         } catch (NoSuchMethodException e) {  
  56.             e.printStackTrace();  
  57.         }  
  58.           
  59.         if (b1.getAuthor() == b2.getAuthor()) {  
  60.             System.out.println("证明: b1.getAuthor()与b2.getAuthor()返回同一个对象." );  
  61.         }  
  62.           
  63.           
  64.         /*  
  65.          * 例子3 .将map中的内容复制到bean中.  
  66.          */  
  67.         Map<String,Object> m1 = new HashMap<String,Object>();  
  68.         m1.put("age" 31 );  
  69.         m1.put("name" "fhd" );  
  70.         Person p6 = new Person();  
  71.         try {  
  72.             PropertyUtils.copyProperties(p6, m1);  
  73.         } catch (IllegalAccessException e) {  
  74.             e.printStackTrace();  
  75.         } catch (InvocationTargetException e) {  
  76.             e.printStackTrace();  
  77.         } catch (NoSuchMethodException e) {  
  78.             e.printStackTrace();  
  79.         }  
  80.         System.out.println("p6.name: " +p6.getName()+ "\tp6.age: " +p6.getAge());  
  81.     }  
  82. }  
package test4;

import java.lang.reflect.InvocationTargetException;
import java.util.HashMap;
import java.util.Map;

import org.apache.commons.beanutils.PropertyUtils;

/**
 * commons beanutils之复制Bean属性
 * @author fhd001
 */
public class PropertyUtilsTest7 {

	public static void main(String[] args) {

		/*
		 * 例子1.
		 */
		Person p1 = new Person();
		p1.setAge(12);
		p1.setName("fhd");
		
		Person p2 = new Person();
		try {
			PropertyUtils.copyProperties(p2, p1);
		} catch (IllegalAccessException e) {
			e.printStackTrace();
		} catch (InvocationTargetException e) {
			e.printStackTrace();
		} catch (NoSuchMethodException e) {
			e.printStackTrace();
		}
		System.out.println("p2.age: "+p2.getAge()+"\tp2.name:"+p2.getName());
		
		
		/*
		 * 例子2.证明没有克隆bean属性
		 */
		Person p3 = new Person();
		p3.setAge(34);
		p3.setName("ldh");
		
		Book b1 = new Book();
		b1.setAuthor(p3);
		b1.setBookName("java");
		
		Book b2 = new Book();
		try {
			PropertyUtils.copyProperties(b2, b1);
		} catch (IllegalAccessException e) {
			e.printStackTrace();
		} catch (InvocationTargetException e) {
			e.printStackTrace();
		} catch (NoSuchMethodException e) {
			e.printStackTrace();
		}
		
		if (b1.getAuthor() == b2.getAuthor()) {
			System.out.println("证明: b1.getAuthor()与b2.getAuthor()返回同一个对象.");
		}
		
		
		/*
		 * 例子3.将map中的内容复制到bean中.
		 */
		Map<String,Object> m1 = new HashMap<String,Object>();
		m1.put("age", 31);
		m1.put("name", "fhd");
		Person p6 = new Person();
		try {
			PropertyUtils.copyProperties(p6, m1);
		} catch (IllegalAccessException e) {
			e.printStackTrace();
		} catch (InvocationTargetException e) {
			e.printStackTrace();
		} catch (NoSuchMethodException e) {
			e.printStackTrace();
		}
		System.out.println("p6.name: "+p6.getName()+"\tp6.age: "+p6.getAge());
	}
}

 

结果代码
  1. p2.age:  12   p2.name:fhd  
  2. 证明: b1.getAuthor()与b2.getAuthor()返回同一个对象.  
  3. p6.name: fhd    p6.age: 31
    ====================================== 
主要使用:通过一个map接收action里转过来的参数,然后new 一个持久化对象,通过PropertyUtils.copyProperties()转到持久化对象中
请看代码:
  School  s = new School();  ///持久化对象
              s.setSchoolId("11");
              s.setSchoolName("11");
              s.setIntroduce("ddd");
           
              Map<String, String> formMap = new HashMap<String, String>();
              formMap.put("schoolId", "22");
              formMap.put("schoolName", "22");
              PropertyUtils.copyProperties(s, formMap);
              System.out.println(s.getIntroduce());
              System.out.println(s.getSchoolName());
             
打印出来:
ddd
22
还有一个复制类实现类
   1. public class ObjectTransWrap {  
   2.     public static Object wrap(Object actionObj,Class OperatorAction) throws Exception, InstantiationException{  
   3.         Object o = OperatorAction.newInstance();  
   4.         BeanInfo  beanInfo = Introspector.getBeanInfo(actionObj.getClass());  
   5.         PropertyDescriptor[] properties = beanInfo.getPropertyDescriptors();  
   6.         Method get = null;  
   7.         Method  set = null;  
   8.         for (int i = 0; i < properties.length; i++) {  
   9.              try{  
  10.                  get = properties[i].getReadMethod();  
  11.                  set = o.getClass().getMethod( properties[i].getWriteMethod().getName(), new Class[]{properties[i].getPropertyType()});  
  12.              }catch(Throwable a){  
  13.                  continue;  
  14.              }  
  15.              if(set!=null&&get!=null){  
  16.                  set.invoke(o, new Object[]{get.invoke(actionObj, new Object[]{})});  
  17.                  set = null;  
  18.                  get = null;  
  19.              }  
  20.         }  
  21.         return o;  
  22.           
  23.     }  
 
分享到:
评论

相关推荐

    commons-beanutils-bean-collections.jar下载

    commons-beanutils-bean-collections.jar commons-beanutils-bean-collections.jar

    commons-beanutils-1.9.4

    - **复制属性**:`copyProperties()`方法可以将一个JavaBean对象的属性值复制到另一个对象,这在处理模型对象时非常有用。 - **默认值**:当尝试获取不存在的属性或者转换失败时,可以设置默认值来避免异常。 - *...

    commons-beanutils-bean-collections.jar

    commons-beanutils-bean-collections-1.7.0.jar

    commons-beanutils-1.8.0 jar包下载

    commons-beanutils-1.8.0 jar包: 1.commons-beanutils-1.8.0.jar 2.commons-beanutils-1.8.0-javadoc.jar ...4.commons-beanutils-bean-collections-1.8.0.jar 5.commons-beanutils-core-1.8.0.jar

    commons-beanutils-bean-collections-1.8.0.jar

    commons-beanutils-bean-collections-1.8.0.jar

    commons-beanutils-1.9.3jar包source包及相关jar包

    2. **复制属性**:`copyProperties()`方法可以方便地将一个Bean的属性值复制到另一个Bean,这对于数据对象的克隆或者属性初始化非常有用。 3. **动态Bean访问**:通过`getProperty()`和`setProperty()`方法,可以...

    commons-beanutils、commons-collections、commons-collections等常用jar 包下载

    - 属性拷贝:可以方便地将一个对象的属性值复制到另一个对象。 - 动态Bean访问:无需了解具体Bean类的结构,即可操作其属性。 - 集合转换:支持将集合数据转换为JavaBean数组或列表。 - EL表达式支持:与JSP ...

    commons-beanutils-1.8.3.jar.zip

    3. **复制属性**:`copyProperties()`方法允许将一个对象的所有属性值复制到另一个对象上,这对于创建对象副本或者填充模型数据非常有用。它甚至能处理嵌套属性的复制。 4. **动态Bean操作**:BeanUtils可以动态地...

    Commons BeanUtils 1.8.3 API

    5. **国际化支持**:BeanUtils也与Apache Commons Locale和ResourceBundle结合,支持多语言环境下的Bean属性设置。 6. **异常处理**:在处理过程中遇到的异常,如无法找到setter或getter方法,BeanUtils会抛出一个`...

    commons-beanutils-1.8.0.zip

    4. **Copy Properties**:BeanUtils.copyProperties()方法允许你将一个对象的所有属性值复制到另一个对象,这在对象克隆或数据模型转换中很常见。 5. **Nested Properties**:除了基本的属性操作外,BeanUtils还...

    commons-beanutils-1.8.0-src

    Apache Commons BeanUtils是Java开发中常用的一个工具库,它提供了方便的Bean操作方法,简化了Java对象属性的访问和设置。本篇文章将深入探讨`commons-beanutils-1.8.0-src`的源码,帮助开发者更好地理解和运用这个...

    commons-beanutils-1.9.2.rar

    BeanUtils库通过反射机制,可以自动处理Bean的属性访问,包括设置值、获取值以及复制Bean属性等操作,极大地提高了开发效率。 1. **属性访问**:BeanUtils提供了一系列方法,如`getProperty()`和`setProperty()`,...

    commons-beanutils-bean-collections-1.8.3.jar

    commons-beanutils-bean-collections-1.8.3.jar

    commons-beanutils-1.9.2包含全部jar包源码及API文档

    Commons BeanUtils Most Java developers are used to creating Java classes that conform to the JavaBeans naming patterns for property getters and setters. It is natural to then access these methods ...

    commons-beanutils-1.9.3-bin.zip

    例如,在复制属性时,如果源对象的某个属性为空,BeanUtils会忽略该属性,不会影响目标对象的其他属性。 4. **反射支持**:BeanUtils库内部使用了Java的反射API,能够在运行时动态地获取类的信息和调用方法,这样...

    commons-beanutils-1.8.0.rar源文件及jar包

    3. **复制属性**:`copyProperties()`方法可以将一个Java Bean对象的所有属性复制到另一个对象,这对于创建对象的副本或者在对象之间同步属性非常有用。 4. **动态Bean**:BeanUtils还提供了`DynamicBean`接口,...

    commons-beanutils (1.7.0 -1.9.2)6个

    - **属性访问**:`commons-beanutils` 提供了`BeanUtils`类,能够通过反射机制动态地访问Bean的属性,支持属性的读取和设置。 - **属性拷贝**:`copyProperties()`方法使得能够将一个Bean的所有属性值复制到另一个...

    commons-beanutils-core-1.8.0-BETA.zip

    在Java开发中,BeanUtils Core 提供了一种方便的方式来处理Bean属性的设置、获取、复制以及类型转换等任务,从而提高了开发效率。本文将围绕"commons-beanutils-core-1.8.0-BETA.zip"这个压缩包文件,深入解析其核心...

    Commons BeanUtils包说明

    Apache Commons BeanUtils是Java开发中一个非常实用的工具包,它简化了对象属性之间的操作,提供了大量的静态方法来处理Bean对象。这个包的核心思想是基于JavaBeans规范,即具有getter和setter方法的对象,使得...

    commons-beanutils-1.8.3-bin+logging.rar

    Apache Commons BeanUtils是Java开发中广泛使用的开源工具库,它简化了JavaBean对象的操作,提供了大量的便捷方法,使得开发者能够更加方便地处理属性的读取和设置,以及对象之间的复制。在这个标题为"commons-...

Global site tag (gtag.js) - Google Analytics