commons-beanutils包

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("[email protected]");
		  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.csdn.net/terryzero/article/details/4320220

猜你喜欢

转载自ldaolong.iteye.com/blog/2232751