commons-beanutils包

本文深入解析了JavaBean操作的核心库commons-beanutils.jar的使用方法,包括对象克隆、属性复制、动态创建未知类型对象等常见功能,并通过实例展示了如何灵活运用这些工具来解决实际问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

commons-beanutils.jar: 用于处于javaBeans。

工作机制:利用java的反射机制。

 

1.常用包

org.apache.commons.beanutils – 核心包,定义一组Utils类和需要用到的接口规范

org.apache.commons.beanutils.converters – 转换String到需要类型的类,实现Converter接口

org.apache.commons.beanutils.locale – beanutils的locale敏感版本

org.apache.commons.beanutils.locale.converters – converters的locale敏感版本

org.apache.commons.collections – beanutils使用到的Collection类

 

2,常用方法

public static void main(String[] args) throws Exception {
		/**
		 * 1.对象克隆。
		 * 需注意的是Huma的访问修饰符必须是public,否则在其他包下无法访问,从而导致抛出异常
			另外Huma必须有setXXX,getXXX方法,否则也是无法克隆的,关于这点似乎美中不足吧
		 */
		Huma huma=new Huma();
		huma.setAge(22);
		huma.setName("Darren");
		Huma huma2=(Huma)BeanUtils.cloneBean(huma);
		
		System.out.println("object clone -- age: " + huma2.getAge() +" name: " + huma2.getName());
		
		/**
		 * 
		 * 2. 属性复制
		 * 两个不同类型的对象,如果属性名称相同,类型相同,且有对应的setXXX,getXXX方法,也可以进行属性复制
		 */
		Human2 human2=new Human2();
		 BeanUtils.copyProperties(human2, huma);
		 System.out.println("properties clone --  age: " + human2.getAge() +" name: " + human2.getName());
		 
		 /**
		  * 3.动态创建未知类型对象,动态添加未知对象的属性
		  * MutableDynaClass:对于DynaClass的特殊扩展,允许动态的添加和移除类的属性
		  */
		 DynaProperty []pros = new DynaProperty[]{
				 new DynaProperty("name",String.class),
				 new DynaProperty("age",Integer.class)
		 };
		 DynaClass dynaC = new BasicDynaClass("Girl", null,pros);
		  DynaBean bean=dynaC.newInstance();
		  bean.set("name", "wang z"); //也可以PropertyUtils.setProperty(bean, "name", "wang zhao jun")
		  bean.set("age", 18);
		  
		  System.out.println("动态创建未知类型对象-- class:"+ bean.getClass()
				  + " name: " + bean.get("name")
				  + " age: " + bean.get("age"));
		  
		  /**
		   *  new LazyDynaBean();
		   * bean.getDynaClass().getDynaProperties();
		   * 
		   * 引用类型的一般类型: BeanUtils.getProperty(user, "profile.brithDate")
		   * Map类型: BeanUtils.getProperty(user, "profile.phone(home)")
		   * 数组和List,Set类型: BeanUtils.getProperty(user, "profile.address[0].city")
		   * 
		   */
		  Profile pf = new Profile();
		  pf.setHuma( new Huma[]{huma,huma2});
		  pf.setEmail("ldaolong@126.com");
		  pf.setBrithDate(new Date());
		  pf.setHuman(human2);
		  
		System.out.println(" 引用类型的一般类型:" + BeanUtils.getProperty(pf, "human.name"));
		
		
		/**
		 * 
		 * PropertyUtils的工具类,它也提供copyProperties()方法,作用与 BeanUtils的同名方法十分相似,
		 * 主要的区别在于后者提供类型转换功能,即发现两个JavaBean的同名属性为不同类型时,在支持的数据类型范围 内进行转换,而前者不支持这个功能,但是速度会更快一些。
		 * 注意一点,java.util.Date是不被支持的,而它的子类java.sql.Date是被支持的
		 */
	}

 

3.其他一些方法

PropertyUtils.getSimpleProperty(Object bean, String name) 
PropertyUtils.setSimpleProperty(Object bean, String name, Object value)

 Indexed属性访问方法
PropertyUtils.getIndexedProperty(Object bean, String name) 
PropertyUtils.getIndexedProperty(Object bean, String name, int index) 
PropertyUtils.setIndexedProperty(Object bean, String name, Object value) 

PropertyUtils.setIndexedProperty(Object bean, String name, int index, Object value)

Mapped属性访问方法
PropertyUtils.getMappedProperty(Object bean, String name) 
PropertyUtils.getMappedProperty(Object bean, String name, String key) 
PropertyUtils.setMappedProperty(Object bean, String name, Object value) 
PropertyUtils.setMappedProperty(Object bean, String name, String key, Object value)

......

 

4.其他一些网站

http://blog.163.com/among_1985/blog/static/275005232008111182848156/

http://blog.youkuaiyun.com/terryzero/article/details/4320220

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值