JavaBean操作工具类,Commons BeanUtils 1.9.1 发布
jopen 11年前
在开发过程中,通常会遇到一些特殊的需求,比如拷贝对象,不同类的对象之间设置公有属性的值等,apache的开源框架commons-beanutils提供了强大的支持,该框架广泛用于其他框架中如struts,hibernate,spring中。
1、对象克隆,对象属性复制(基于以下类)
类定义
public class Huma{ int age; public int getAge() { return age; } public void setAge(int age) { this.age = age; } } public class Huma2{ int age; public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
测试代码
1-1、对象克隆
Huma huma=new Huma(); huma.age=3; Huma huma2=(Huma)BeanUtils.cloneBean(huma); System.out.println(huma2.age);
需注意的是Huma的访问修饰符必须是public,否则在其他包下无法访问,从而导致抛出异常
另外Huma必须有setXXX,getXXX方法,否则也是无法克隆的,关于这点似乎美中不足吧
1-2、属性复制
两个不同类型的对象,如果属性名称相同,类型相同,且有对应的setXXX,getXXX方法,也可以进行属性复制
,注意上面说的属性相同必须满足有相同的setXXX和getXXX方法,并不要求属性名真的要一样
Huma huma=new Huma(); huma.age=3; Huma2 huma2=new Huma2(); BeanUtils.copyProperties(huma2, huma);//将第二个参数的属性值复制到第一个参数相同的名称的属性上
调用以上代码huma2.age=3
二、动态创建未知类型对象,动态添加未知对象的属性
DynaProperty []pros=new DynaProperty[]{ new DynaProperty("name", String.class), new DynaProperty("age", int.class)}; DynaClass dynaC=new BasicDynaClass("Girl", null,pros); DynaBean bean=dynaC.newInstance(); bean.set("name", "wang zhao jun"); //也可以PropertyUtils.setProperty(bean, "name", "wang zhao jun") bean.set("age", 18); System.out.println(bean.getClass()); System.out.println("name:"+bean.get("name")); System.out.println("age:"+bean.get("age"))
这样就动态生成拥有任何属性的javabean了
1.9.1版本是一个bug修复版,解决1.9.0版本引入的一个自定义内省新功能的问题。 所需的最低Java版本是1.5。 ========================= * [BEANUTILS-456] 对于通过自定义内省获取的PropertyDescriptors, 现在额外信息防止写入方法在垃圾收集过程中会丢失项目地址:http://commons.apache.org/proper/commons-beanutils/