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.采用浅复制的方式
实例:
public class Address
{
private String province;
private String city;
//getter/setter
}
public class Person
{
private Integer id;
private String name;
private Address address;
//getter/setter
}
public void test1()
{
Person bean = new Person();
Address address = new Address();
address.setProvince("hunan");
address.setCity("huaihua");
bean.setId(1);
bean.setName("name1");
bean.setAddress(address);
try
{
//----test shadow clone bean----
Person bean2 = (Person) BeanUtils.cloneBean(bean);
bean2.getAddress().setProvince("beijing");
bean2.getAddress().setCity("beijing");
System.out.println(bean.getAddress()+":::"+bean2.getAddress()); }catch(Exception e)
{
e.printStackTrace();
}
}
结果:
Address [province=beijing, city=beijing]:::Address [province=beijing, city=beijing]
2.copyProperties(Object dest, Object orig)
复制属性值从源bean到目标bean对于所有的属性,采用的是shallow copy方式,内部采用内省的方式获取get/set方法来获取源对象的属性和对目标对象的设值。
实例:
@Test
public void testcopyProperties()
{
Person bean = new Person();
Address address = new Address();
address.setProvince("hunan");
address.setCity("huaihua");
bean.setId(1);
bean.setName("name1");
bean.setAddress(address);
Person dest = new Person();
try
{
BeanUtils.copyProperties(dest, bean);
System.out.println("dest "+dest);
}catch(Exception e)
{
e.printStackTrace();
}
}
结果:
dest Person [id=1, name=name1, address=Address [province=hunan, city=huaihua]]
实例:
public class Student
{
private Integer id;
private String name;
private Date date;
//gettter/settter
}
@Test
public void testcopyProperties()
{
Person bean = new Person();
Address address = new Address();
address.setProvince("hunan");
address.setCity("huaihua");
bean.setId(1);
bean.setName("name1");
bean.setAddress(address);
Student dest = new Student();
try
{
BeanUtils.copyProperties(dest, bean);
System.out.println(dest);
}catch(Exception e)
{
e.printStackTrace();
}
}
结果:
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(),会被继承读方法,同时也会被作为集合的属性。
实例:
@Test
public void testDescribe()
{
Person bean = new Person();
bean.setId(1);
bean.setName("world");
try
{
Map<String, String> map = BeanUtils.describe(bean);
System.out.println("map: "+map);
} catch (IllegalAccessException e)
{
e.printStackTrace();
} catch (InvocationTargetException e)
{
e.printStackTrace();
} catch (NoSuchMethodException e)
{
e.printStackTrace();
}
}
结果:
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)
Apache-commons.BeanUtils浅析的更多相关文章
- Apache Commons BeanUtils
http://commons.apache.org/proper/commons-beanutils/javadocs/v1.9.2/apidocs/org/apache/commons/beanut ...
- myeclipse的项目导入到eclipse下,com.sun.org.apache.commons.beanutils.BeanUtils不能导入
com.sun.org.apache.commons.beanutils.BeanUtils这个包不能引入了怎么办自己下了个org.apache.commons的jar包了之后,改成import or ...
- 关闭log4j 输出 DEBUG org.apache.commons.beanutils.*
2016-03-23 10:52:26,860 DEBUG org.apache.commons.beanutils.MethodUtils - Matching name=getEPort on c ...
- Apache Commons Beanutils对象属性批量复制(pseudo-singleton)
Apache Commons Beanutils为开源软件,可在Apache官网http://commons.apache.org/proper/commons-beanutils/download_ ...
- org.apache.commons.beanutils.BeanMap简单使用例子
一.org.apache.commons.beanutils.BeanMap; 将一个java bean允许通过map的api进行调用, 几个支持的操作接口: Object get(Object ke ...
- 对于Java Bean的类型转换问题()使用 org.apache.commons.beanutils.ConvertUtils)
在进行与数据库的交互过程中,由数据库查询到的数据放在 map 中,由 map 到 JavaBean 的过程中可以使用 BeanUtils.populate(map,bean)来进行转换 这里要处理的问 ...
- Apache Commons Beanutils 三 (BeanUtils、ConvertUtils、CollectionUtils...)
前言 前面已经学习了Apache Commons Beanutils包里的PropertyUtils和动态bean,接下来将学习剩下的几个工具类,个人觉得还是非常实用的,特别是CollectionUt ...
- Apache Commons Beanutils 二 (动态Bean - DynaBeans)
相关背景 上一篇介绍了PropertyUtils的用法,PropertyUtils主要是在不修改bean结构的前提下,动态访问bean的属性: 但是有时候,我们会经常希望能够在不定义一个Java类的前 ...
- Apache Commons Beanutils 一 (使用PropertyUtils访问Bean属性)
BeanUtils简要描述 beanutils,顾名思义,是java bean的一个工具类,可以帮助我们方便的读取(get)和设置(set)bean属性值.动态定义和访问bean属性: 细心的话,会发 ...
- org.springframework.beans.BeanUtils与org.apache.commons.beanutils.BeanUtils的copyProperties用法区别
知识点 org.springframework.beans.BeanUtils与org.apache.commons.beanutils.BeanUtils都提供了copyProperties方法,作 ...
随机推荐
- ofbiz研究
近段时间,刚有有时间研究了下ofbiz ; 目前还是刚开始,后期会记录过程 有一起研究的没
- centos 7 ifconfig 命令找不到
最近在配置linux 环境: 在官网看到centOS除了最新版本7,那就尝试一下吧.最小安装centOS 7之后发现没有ifconfig命令,在网上找了一下都说是路径的路问题. 我用echo $PAT ...
- C#基础-hashtable,泛型和字典集合
hashtable 的存储方式 使用方法: 1.引入包含Hashtable的命名空间 using System.Collections; // 引入Hash所在的命名空间 2.往hash表里面添加数据 ...
- TCP_Wrappers & PAM & Nsswitch服务
cpwrapper:工作在第四层(传输层),能够对有状态连接的服务进行安全检测并实现访问控制的工具.部分功能上跟iptables重叠. 对于进出本主机访问某特定服务的连接基于规则进行检查的一个访问控制 ...
- LNMP+HAProxy+Keepalived负载均衡 - 基础服务准备
日志服务 修改日志服务配置并重启日志服务: ``` vim /etc/rsyslog.conf ``` 编辑系统日志配置,指定包含的配置文件路径和规则: ``` $IncludeConfig /etc ...
- Python面向对象--高级(一)
## 属性的类型 - 属性可分为类属性和实例属性 - 实例属性可以通过在类中使用self定义,或者直接在类外部使用实例变量定义 class Person(object): def __init__(s ...
- 学习python第十一天,函数3 函数的序列化和反序列化
我们把变量从内存中变成可存储或传输的过程称之为序列化,序列化之后,就可以把序列化后的内容写入磁盘,或者通过网络传输到别的机器上. 反过来,把变量内容从序列化的对象重新读到内存里称之为反序列化,即unp ...
- POJ 3977 折半枚举
链接: http://poj.org/problem?id=3977 题意: 给你n个数,n最大35,让你从中选几个数,不能选0个,使它们和的绝对值最小,如果有一样的,取个数最小的 思路: 子集个数共 ...
- java变量、数据类型
public class Test { public static void main(String[] args) { //变量 //数据类型 变量名; //基本数据类型: //一个字节8位 //整 ...
- PHP.TP框架下商品项目的优化1-时间插件、鼠标所在行高亮、布局规划页面
1.优化搜索表单中按时间搜索的功能 添加一个时间插件datetimepicker,在lst.html中,注意要导入jquery.min.js,此处从前文的在线编辑器中导入 <!-- 导入 --& ...