Apache-commons.BeanUtils浅析

BeanUtils:通过反射控制JavaBean属性的实用方法。
     1.cloneBean(Object) Object
         克隆一个bean是基于可用属性的get和set方法,即使这个bean类没有实现Cloneable接口方法的实现是有BeanUtilBean的newbean = bean.getClass().newInstance();
对newbean的属性设值采用PropertyUtilsBean.copyProperties内部采用java的内省调用get/set方法进行获取bean属性/设置newbean属性。
    API:
      Note: this method creates a shallow clone.采用浅复制的方式
    实例:

 1  public class Address
 2 {
 3     private String province;
 4     private String city;
 5     //getter/setter
 6 }
 7  public class Person
 8 {
 9     private Integer id;
10     private String name;
11     private Address address;
12     //getter/setter
13 }
14 public void test1()
15 {
16     Person bean = new Person();
17     Address address = new Address();
18     address.setProvince("hunan");
19     address.setCity("huaihua");
20     bean.setId(1);
21     bean.setName("name1");
22     bean.setAddress(address);
23     try
24     {
25         //----test shadow clone bean----
26         Person bean2 = (Person) BeanUtils.cloneBean(bean);
27         bean2.getAddress().setProvince("beijing");
28         bean2.getAddress().setCity("beijing");
29         System.out.println(bean.getAddress()+":::"+bean2.getAddress());
30
31     }catch(Exception e)
32     {
33         e.printStackTrace();
34     }
35 }

  结果:
    Address [province=beijing, city=beijing]:::Address [province=beijing, city=beijing]

  2.copyProperties(Object dest, Object orig)
            复制属性值从源bean到目标bean对于所有的属性,采用的是shallow copy方式,内部采用内省的方式获取get/set方法来获取源对象的属性和对目标对象的设值。
       实例:

    

 1 @Test
 2 public void testcopyProperties()
 3 {
 4     Person bean = new Person();
 5     Address address = new Address();
 6     address.setProvince("hunan");
 7     address.setCity("huaihua");
 8     bean.setId(1);
 9     bean.setName("name1");
10     bean.setAddress(address);
11     Person dest = new Person();
12     try
13     {
14         BeanUtils.copyProperties(dest, bean);
15         System.out.println("dest "+dest);
16     }catch(Exception e)
17     {
18         e.printStackTrace();
19     }
20 }

  结果:
    dest Person [id=1, name=name1, address=Address [province=hunan, city=huaihua]]

  实例:

    

 1 public class Student
 2 {
 3     private Integer id;
 4     private String name;
 5     private Date date;
 6     //gettter/settter
 7 }
 8 @Test
 9 public void testcopyProperties()
10 {
11     Person bean = new Person();
12     Address address = new Address();
13     address.setProvince("hunan");
14     address.setCity("huaihua");
15     bean.setId(1);
16     bean.setName("name1");
17     bean.setAddress(address);
18     Student dest = new Student();
19     try
20     {
21         BeanUtils.copyProperties(dest, bean);
22         System.out.println(dest);
23     }catch(Exception e)
24     {
25         e.printStackTrace();
26     }
27 }

  结果:
    Student [id=1, name=name1, date=null]

  3.copyProperty(Object bean, String name, Object value)
    复制一个具体的属性值到具体的bean中,并执行所需的任何类型转换。采用内省的方式对bean进行设值。
  4.Map<String, String> describe(Object bean)
    返回指定的实体提供一个读方法的全部属性集。注:任何一个类都是Object的子类,在子类中存在getClass(),会被继承读方法,同时也会被作为集合的属性。

  实例:

    

 1 @Test
 2 public void testDescribe()
 3 {
 4     Person bean = new Person();
 5     bean.setId(1);
 6     bean.setName("world");
 7     try
 8     {
 9         Map<String, String> map =  BeanUtils.describe(bean);
10         System.out.println("map: "+map);
11     } catch (IllegalAccessException e)
12     {
13         e.printStackTrace();
14     } catch (InvocationTargetException e)
15     {
16         e.printStackTrace();
17     } catch (NoSuchMethodException e)
18     {
19         e.printStackTrace();
20     }
21 }

  结果:
    map: {address=null, name=world, id=1, class="class" com.beanutil.px.Person}

  5.String getProperty(Object bean, String name)
    获取bean指定的属性值,内部采用内省的方式获取调用get方法
  6. populate(Object bean, Map<String, ? extends Object> properties)
    采用Map作为参数对bean进行设值。内部通过遍历Map调用setProperty(bean, name, value)设值
  String[] getArrayProperty(Object bean, String name)
    返回一个指定的数组属性,作为String[]返回
  String getIndexedProperty(Object bean, String name)
    返回bean中属性的索引值
  String getMappedProperty(Object bean, String name)
  String getMappedProperty(Object bean, String name, String key)

时间: 2024-11-09 00:31:00

Apache-commons.BeanUtils浅析的相关文章

Apache commons beanutils简介和使用

在一般的写bean组件的时候,都必须要写setter和getter方法,当然假如我们事先已经知道bean的相关属性和方法,写bean是比较简单的,但是组件太多的时候,重复编写经常是枯燥乏味令人厌烦的.但当有些时候我么需要调用动态对象的属性的时候,我们应该怎么来设定和获取对象的属性呢?BeanUtils就可以帮助我们来简化解决这个问题. 目前最新的版本是1.9. 在日常的开发中,下面类似的代码应该是非常的眼熟. DynaActionForm daf =(DynaActionForm)form ;

Apache Commons Beanutils 三 (BeanUtils、ConvertUtils、CollectionUtils...)

前言 前面已经学习了Apache Commons Beanutils包里的PropertyUtils和动态bean,接下来将学习剩下的几个工具类,个人觉得还是非常实用的,特别是CollectionUtils: BeanUtils 简单介绍下两个方法的使用,populate和copyProperties, populate可以帮助我们把Map里的键值对值拷贝到bean的属性值中: copyProperties,顾名思义,帮我们拷贝一个bean的属性到另外一个bean中,注意是浅拷贝 如下示例: /

Apache Commons Beanutils 二 (动态Bean - DynaBeans)

相关背景 上一篇介绍了PropertyUtils的用法,PropertyUtils主要是在不修改bean结构的前提下,动态访问bean的属性: 但是有时候,我们会经常希望能够在不定义一个Java类的前提下,动态决定这个类中包含哪些属性,并动态访问它们的属性值,比较典型的使用场景是作为SQL查询的结果集的bean: 为了支持以上特性,Apache Commons Beanutils包为我们提供了DynaBean接口.DynaClass接口: 举个简单例子如下: DynaProperty[] pro

Apache Commons Beanutils教程一(访问Bean属性)

BeanUtils简要描述 beanutils,顾名思义,是java bean的一个工具类,可以帮助我们方便的读取(get)和设置(set)bean属性值.动态定义和访问bean属性: 细心的话,会发现其实JDK已经提供了一个java.beans包,同样可以实现以上功能,只不过使用起来比较麻烦,所以诞生了apache commons beanutils: 看源码就知道,其实apache commons beanutils就是基于jdk的java.beans包实现的. Java Bean 在介绍a

myeclipse的项目导入到eclipse下,com.sun.org.apache.commons.beanutils.BeanUtils不能导入

com.sun.org.apache.commons.beanutils.BeanUtils这个包不能引入了怎么办自己下了个org.apache.commons的jar包了之后,改成import org.apache.commons.beanutils.BeanUtils 编译能通过了.但是用到beanutils的时候会报错,java.lang.reflect.InvocationTargetException java.lang.NoClassDefFoundError: org/apache

java.lang.NoClassDefFoundError: org/apache/commons/beanutils/BeanUtils

在servlet类中使用Beanutils方法封装前端注册界面信息,浏览器中报错,状态码500,报错信息: 解决办法: 在Tomcat和web下的lib包中都要导入commons-beanutils-1.8.3.jar这个jar包. ^_^ 原文地址:https://www.cnblogs.com/kongieg/p/10126746.html

Apache Commons 工具类介绍及简单使用

Apache Commons包含了很多开源的工具,用于解决平时编程经常会遇到的问题,减少重复劳动.下面是我这几年做开发过程中自己用过的工具类做简单介绍.   组件 功能介绍 BeanUtils 提供了对于JavaBean进行各种操作,克隆对象,属性等等. Betwixt XML与Java对象之间相互转换. Codec 处理常用的编码方法的工具类包 例如DES.SHA1.MD5.Base64等. Collections java集合框架操作. Compress java提供文件打包 压缩类库. C

一篇关于apache commons类库的详解

原文 http://blog.csdn.net/wiker_yong/article/details/23551209 1.1. 开篇 在Java的世界,有很多(成千上万)开源的框架,有成功的,也有不那么成功的,有声名显赫的,也有默默无闻的.在我看来,成功而默默无闻的那些框架值得我们格外的尊敬和关注,Jakarta Commons就是这样的一个框架.如果你至少参与了一个中型规模的Java项目,那么我想有超过一大半的机会你都接触和使用到了Jakarta Commons,不管你自己有没有察觉.就我所

Apache Commons 工具集介绍

Apache Commons包含了很多开源的工具,用于解决平时编程经常会遇到的问题,减少重复劳动.下面是我这几年做开发过程中自己用过的工具类做简单介绍. 组件 功能介绍 BeanUtils 提供了对于JavaBean进行各种操作,克隆对象,属性等等. Betwixt XML与Java对象之间相互转换. Codec 处理常用的编码方法的工具类包 例如DES.SHA1.MD5.Base64等. Collections java集合框架操作. Compress java提供文件打包 压缩类库. Con

Caused by: java.lang.NoClassDefFoundError: org/apache/commons/lang/exception/NestableRuntimeException

转载:http://www.tuicool.com/articles/Vvia6f 缺少相应jar包都会有异常,根据异常找jar包导入...... 这里我说下lang包,因为这个包我找了好半天: 我用的是: commons-lang3-3.1.jar  出现异常: java.lang.NoClassDefFoundError: org/apache/commons/lang/exception/NestableRuntimeException 可以看出是因为缺少jar包,但是很明显我已经导入了,