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方法,作 ...
随机推荐
- tcp回显客户端发送的数据
客户端: import socket tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) tcp_socket.connect ...
- LNMP+HAProxy+Keepalived负载均衡 - 基础服务准备
日志服务 修改日志服务配置并重启日志服务: ``` vim /etc/rsyslog.conf ``` 编辑系统日志配置,指定包含的配置文件路径和规则: ``` $IncludeConfig /etc ...
- RESTful API架构和oauth2.0认证机制(概念版)
1. 什么是REST REST全称是Representational State Transfer,中文意思是表述(编者注:通常译为表征)性状态转移. 它首次出现在2000年Roy Fielding的 ...
- 学习Pytbon第九天,函数1 过程和参数
函数def func1():定义函数 '''testing1'''#函数的说明 print("in the func1")#定义过程 return 0 #得到函数的执行结果.还是程 ...
- 1016-02-首页17-添加转发微博控件-计算转发配图的 Frame-------打印出 被转发微博的模型
说明:HWStatus为微博模型,_retweeted_status 为返回的数据( 一条微博模型)里面的一个属性,_retweeted_status 不为空表示此微博是否转发了其他微博._retwe ...
- C语言字符篇(三)字符串比较函数
#include <string.h> int strcmp(const char *s1, const char *s2); 比较字符串s1和s2 int strncmp(const ...
- TouTiao开源项目 分析笔记20 问答详情
1.效果预览 1.1.效果预览,从问答列表开始 前面实现了从列表到内容. 这里主要讲解从内容到详情. 点击每一个回答内容,进入回答详情页面. 1.2.触发的点击事件 在WendaContentView ...
- 20145202马超 《Java程序设计》 实验一 实验报告
一.实验内容 1.使用JDK编译.运行简单的Java程序: 2.使用Eclipse 编辑.编译.运行.调试Java程序. 二.实验内容 1.完成在Windows环境下对IDEA的配置: 2.实现求正整 ...
- 15.5,centos下redis安全相关
博文背景: 由于发现众多同学,在使用云服务器时,安装的redis3.0+版本都关闭了protected-mode,因而都遭遇了挖矿病毒的攻击,使得服务器99%的占用率!! 因此我们在使用redis ...
- oracle(sql)基础篇系列(三)——数据维护语句、数据定义语句、伪列
DML语句 insert 向表中插入新的记录 --三种插入方式 --(1)不写字段的名字,直接按照字段的顺序把值逐个往里插 insert into dept2 values(50,'DANAME',' ...