Beanutils的使用

这是两个javaBean对象

package com.beanutils ;

import java.util.*;

public class Person {
 private String name;
 private String sex;
 private int age;
 private Address address;
 private List goods;
 private Map contact;

 public Person() {
 }

 public Person(String name) {
  this.name = name;
 }

 public Person(String name,String sex) {
  this.name = name;
  this.sex = sex;
 }

 public String getName() {
  return this.name;
 }

 public void setName(String name) {
  this.name = name;
 }

 public String getSex() {
  return this.sex;
 }

 public void setSex(String sex) {
  this.sex = sex;
 }

 public int getAge() {
  return this.age;
 }

 public void setAge(int age) {
  this.age = age;
 }

 public Address getAddress() {
  return this.address;
 }

 public void setAddress(Address address) {
  this.address = address;
 }

 public List getGoods() {
  return this.goods;
 }

 public void setGoods(List goods) {
  this.goods = goods;
 }

 public Map getContact() {
  return this.contact;
 }

 public void setContact(Map contact) {
  this.contact = contact;
 }

 public void sayHello() {
  System.out.println("Hello World!");
 }

 public void f(String str) {
  System.out.println("Person.f()..." + str);
 }

 public String toString() {
  return "Person.toString()...";
 }
}

=========================================================================================

package com.beanutils ;

public class Address {
 private String province;
 private String city;
 private String street;
 private String zipcode;

 public String getProvince() {
  return this.province;
 }

 public void setProvince(String province) {
  this.province = province;
 }

 public String getCity() {
  return this.city;
 }

 public void setCity(String city) {
  this.city = city;
 }

 public String getStreet() {
  return this.street;
 }

 public void setStreet(String street) {
  this.street = street;
 }

 public String getZipcode() {
  return this.zipcode;
 }

 public void setZipcode(String zipcode) {
  this.zipcode = zipcode;
 }
}

============================================================================

一个测试类

package com.beanutils ;

import java.util.*;
import org.apache.commons.beanutils .*;

public class BeanUtilsTest {
 public static void main(String[] args) throws Exception {
     Address address = new Address();
     address.setProvince("hunan");
     address.setCity("changsha");
     address.setStreet("wuyilu");
     address.setZipcode("410000");

     List goods = new ArrayList();
     goods.add("sporting");
     goods.add("singing");
     goods.add("dancing");

     Map contact = new HashMap();
     contact.put("student","Tom");
     contact.put("teacher","Lucy");

     Person person = new Person();
     person.setName("Mike");
     person.setSex("male");
     person.setAge(25);
     person.setAddress(address);
     person.setGoods(goods);
     person.setContact(contact);

     //BeanUtilsTest.cloneBean(person);
     //BeanUtilsTest.copyProperties(person);
     //BeanUtilsTest.propertyUtilsCopyProperties(person);
     //BeanUtilsTest.copyProperty(person);
     //BeanUtilsTest.describe(person);
     //BeanUtilsTest.propertyUtilsDescribe(person);
     //BeanUtilsTest.getArrayProperty(person);
     //BeanUtilsTest.getIndexedProperty(person);
     //BeanUtilsTest.getMappedProperty(person);
     //BeanUtilsTest.getNestedProperty(person);
     //BeanUtilsTest.populate(person);

     //得到一个bean中指定属性的值,相当于getter
//     System.out.println(BeanUtils .getProperty(person,"name"));
//     //修改一个bean中指定属性的值,相当于setter
//     BeanUtils .setProperty(person,"name","Tom");
//     System.out.println(BeanUtils .getProperty(person,"name"));
//     System.out.println("--------------------------------------");
//
     BeanUtilsTest.invokeMethod();
//     System.out.println("--------------------------------------");
//     BeanUtilsTest.getAccessibleMethod();
//     System.out.println("--------------------------------------");
//     BeanUtilsTest.invokeConstructor();
//     System.out.println("--------------------------------------");
     BeanUtilsTest.getAccessibleConstructor();

    }

    //BeanUtils .cloneBean()--克隆目标bean
    public static void cloneBean(Person person) throws Exception {
     Person p = (Person)BeanUtils .cloneBean(person);
     System.out.println(p.getAddress().getCity());
     System.out.println(person.getAddress().getCity());
     p.getAddress().setCity("hengyang");
     System.out.println("---------------------------");
     System.out.println(p.getAddress().getCity());
     System.out.println(person.getAddress().getCity());
     System.out.println(p.getAddress() == person.getAddress());
    }

    //BeanUtils .copyProperties()--拷贝目标bean中属性的值,能进行类型转换
    public static void copyProperties(Person person) throws Exception {
     Person p = new Person();
     BeanUtils .copyProperties(p,person);
     System.out.println(p.getAddress().getCity());
     System.out.println(person.getAddress().getCity());
     p.getAddress().setCity("hengyang");
     System.out.println("---------------------------");
     System.out.println(p.getAddress().getCity());
     System.out.println(person.getAddress().getCity());
     System.out.println(p.getAddress() == person.getAddress());
    }

    //PropertyUtils.copyProperties()--拷贝目标bean中属性的值,不能进行类型转换
    public static void propertyUtilsCopyProperties(Person person) throws Exception {
     Person p = new Person();
     PropertyUtils.copyProperties(p,person);
     System.out.println(p.getAddress().getCity());
     System.out.println(person.getAddress().getCity());
     p.getAddress().setCity("hengyang");
     System.out.println("---------------------------");
     System.out.println(p.getAddress().getCity());
     System.out.println(person.getAddress().getCity());
     System.out.println(p.getAddress() == person.getAddress());
    }

    //BeanUtils .copyProperty()--拷贝一个值给目标Bean的一个属性,能进行类型转换
    public static void copyProperty(Person person) throws Exception {
     Person p = new Person();
     BeanUtils .copyProperty(p,"age","12");
     System.out.println(p.getAge());
    }

    //BeanUtils .describe()--得到一个bean的所有描述,返回的是一个map
    public static void describe(Person person) throws Exception {
     Map map = BeanUtils .describe(person);
     Set set = map.keySet();
     for(Iterator it = set.iterator(); it.hasNext(); ) {
      Object o = it.next();
      System.out.println(o + ": " + map.get(o));
     }
     System.out.println("--------------------------------------");
//     Collection c = map.values();
//     for(Object o : c) {
//      System.out.println(o);
//     }
    }

    //PropertyUtils.describe()--得到一个bean的所有描述,返回的是一个map
    public static void propertyUtilsDescribe(Person person) throws Exception {
     Map map = PropertyUtils.describe(person);
     Set set = map.keySet();
     for(Iterator it = set.iterator(); it.hasNext(); ) {
      Object o = it.next();
      System.out.println(o + ": " + map.get(o));
     }
     System.out.println("--------------------------------------");
//     Collection c = map.values();
//     for(Object o : c) {
//      System.out.println(o);
//     }
//     System.out.println("----------------------------");
    }

    //BeanUtils .populate()--使用一个map为bean赋值
    public static void populate(Person person) throws Exception {
     Map map = PropertyUtils.describe(person);
     Person p = new Person();
     BeanUtils .populate(p,map);
     System.out.println(p.getName());
     System.out.println(p.getSex());
     System.out.println(p.getAge());
     System.out.println(p.getAddress().getProvince());
     System.out.println(p.getGoods().get(1));
     System.out.println(p.getContact().get("student"));
     System.out.println("--------------------------------------");
    }

    //BeanUtils .getArrayProperty()--将目标bean的一个属性的值转换成一个字符串数组
    public static void getArrayProperty(Person person) throws Exception {
     String[] array = BeanUtils .getArrayProperty(person,"goods");
     for(String str : array) {
      System.out.println(str);
     }
    }

    //BeanUtils .getIndexedProperty()--可以检索目标bean中数组或集合类型的属性指定索引的值
    public static void getIndexedProperty(Person person) throws Exception {
     System.out.println(BeanUtils .getIndexedProperty(person,"goods[0]"));
     System.out.println(BeanUtils .getIndexedProperty(person,"goods",1));
    }

    //BeanUtils .getMappedProperty()--可以检索目标bean中具有map类型的属性中对应键的值
    public static void getMappedProperty(Person person) throws Exception {
     System.out.println(BeanUtils .getMappedProperty(person,"contact(student)"));
     System.out.println(BeanUtils .getMappedProperty(person,"contact","teacher"));
    }

    //BeanUtils .getNestedProperty()--得到目标bean中嵌套属性的值
    public static void getNestedProperty(Person person) throws Exception {
     System.out.println(BeanUtils .getNestedProperty(person,"address.province"));
    }

    //MethodUtils.invokeMethod()--动态调用方法
    public static void invokeMethod() throws Exception {
     //MethodUtils.invokeMethod(Object arg1,String arg2,Object[] arg3)
     //arg1 一个bean的名称
     //arg2 指定bean的方法名
     //arg3 方法中的参数列表
     MethodUtils.invokeMethod(new Person(),"sayHello",new Object[]{});
     //MethodUtils.invokeMethod(Object arg1,String arg2,Object arg3)
     //arg1 一个bean的名称
     //arg2 指定bean的方法名
     //arg3 方法中的参数
     MethodUtils.invokeExactMethod(new Person(),"f","hello");;
    }

    //MethodUtils.getAccessibleMethod()--得到方法
    public static void getAccessibleMethod() throws Exception {
     //MethodUtils.getAccessibleMethod(Class clazz,String methodName,Class[] parameterTypes)
     //clazz 一个bean的类对象
     //methodName bean中的方法名
     //parameterTypes 方法中参数的类型列表
     System.out.println(MethodUtils.getAccessibleMethod(Person.class,"f",new Class[]{String.class}));
     System.out.println(MethodUtils.getAccessibleMethod(Person.class,"f",String.class));
    }

    //ConstructorUtils.invokeConstructor()
    public static void invokeConstructor() throws Exception {
     //ConstructorUtils.invokeConstructor(Class clazz,Object[] args)
     //clazz 一个bean的类对象
     //args bean的构造函数的参数列表
     Person p1 = (Person)ConstructorUtils.invokeConstructor(Person.class,new Object[]{});
     Person p2 = (Person)ConstructorUtils.invokeConstructor(Person.class,"Tom");
     System.out.println(p2.getName());
    }

    //ConstructorUtils.getAccessibleConstructor()
    public static void getAccessibleConstructor() throws Exception {
     //ConstructorUtils.getAccessibleConstructor(Class clazz,Class[] parameterTypes)
     //clazz 一个bean的类对象
     //parameterTypes bean的构造函数的参数类型列表
     System.out.println(ConstructorUtils.getAccessibleConstructor(Person.class,String.class));
     System.out.println(ConstructorUtils.getAccessibleConstructor(Person.class,new Class[]{String.class,String.class}));
    }
}

===========================================================================

package com.beanutils ;

import java.util.*;
import org.apache.commons.beanutils .*;

public class BasicDynaBeanTest {
 public static void main(String[] args) throws Exception {
  //创建一个动态属性数组
     DynaProperty[] properties = new DynaProperty[] {
       new DynaProperty("name",String.class),
       new DynaProperty("sex",String.class),
       new DynaProperty("age",int.class),
       new DynaProperty("address",Map.class)
     };

     //创建一个BasicDynaClass的实例
     //第一个参数设置动态bean的名称
     //第二个参数设置BasicDynaBean的类对象
     //第三个参数设置一个动态属性数组
     BasicDynaClass dynaClass = new BasicDynaClass("customer",BasicDynaBean.class,properties);
     //通过dynaClass得到动态bean的一个实例
     DynaBean customer = dynaClass.newInstance();

     //给属性设值
     Map map = new HashMap();
     map.put("province","hunan");
     map.put("city","changsha");
     map.put("street","wuyilu");
     map.put("zipcode","410000");
     customer.set("name","Tom");
     customer.set("sex","male");
     customer.set("age",25);
     customer.set("address",map);

     System.out.println("name: " + customer.get("name"));
     System.out.println("sex: " + customer.get("sex"));
     System.out.println("age: " + customer.get("age"));
     System.out.println("address: " + ((Map)customer.get("address")).get("province")
     + " " + ((Map)customer.get("address")).get("city")
     + " " + ((Map)customer.get("address")).get("street")
     + " " + ((Map)customer.get("address")).get("zipcode"));
    }
}

========================================================================

package com.beanutils ;

import org.apache.commons.beanutils .*;

public class ConvertUtilsTest {
 public static void main(String[] args) {
  Person person = new Person();
  //将任意的实例转变为String,用法非常简单相当与调用toString()方法
  System.out.println(ConvertUtils.convert(person));

  String str ="123456";
  String ary = "45789";
  //int ss = Integer.parseInt(str);
  Integer s =(Integer)ConvertUtils.convert(str,Integer.class);

  String[] values = {"123","456","789","aafs"};
  Object o = ConvertUtils.convert(values,Integer.class);
  System.out.println(o);
    }
}

================================================================================

package com.beanutils ;

import java.util.*;
import org.apache.commons.beanutils .*;

public class LazyDynaBeanTest {
 public static void main(String[] args) {
  //创建一个LazyDynaBean的实例,它就和普通的bean一样
     LazyDynaBean customer = new LazyDynaBean();
     customer.set("name","Tom");
     customer.set("sex","male");
     customer.set("age",new Integer(25));
     //以map方式给属性赋值,第一个参数是属性名,第二个参数是键,第三个参数是值
     customer.set("address","province","hunan");
     //如果属性是一个数组或集合,可以以索引方式赋值
     //第一个参数是数组名或集合名,第二个参数是索引,第三个参数是数组和集合中存的值
     customer.set("orders",0,"order001");
     customer.set("orders",1,"order002");

     System.out.println("name: " + customer.get("name"));
     System.out.println("sex: " + customer.get("sex"));
     System.out.println("age: " + customer.get("age"));
     System.out.println("address: " + ((Map)customer.get("address")).get("province"));
     System.out.println("orders: " + customer.get("orders",0) + " " + customer.get("orders",1));
    }
}引用 :http://m.blog.csdn.net/blog/liuzhenwen_11109/4734667

  

时间: 2024-08-07 16:49:25

Beanutils的使用的相关文章

JAVA中反射机制五(JavaBean的内省与BeanUtils库)

内省(Introspector) 是Java 语言对JavaBean类属性.事件的一种缺省处理方法. JavaBean是一种特殊的类,主要用于传递数据信息,这种类中的方法主要用于访问私有的字段,且方法名符合某种命名规则.如果在两个模块之间传递信息,可以将信息封装进JavaBean中,这种对象称为“值对象”(Value Object),或“VO”.方法比较少.这些信息储存在类的私有变量中,通过set().get()获得. 例如类UserInfo : package com.peidasoft.in

BeanUtils框架学习

package com.liang.Instopector; import java.io.Serializable; import java.util.Date; public class Student implements Serializable { private String name="liang"; private int age=21; private Date birthday; public String getName() { return name; } pu

[新手学Java]使用beanUtils控制javabean

使用BeanUtils设置/读取属性的值以及默认支持的自动转化: @Test //使用BeanUtils设置/读取属性的值以及自动转化 public void test1() throws IllegalAccessException, InvocationTargetException, NoSuchMethodException{ Person p=new Person(); //使用BeanUtils设置属性的值 BeanUtils.setProperty(p, "username&quo

BeanUtils --- 封装属性到对象中

1.注意需要两个jar包: commons-beanutils-1.8.3.jar  和 commons-logging-1.1.3.jar public class Admin {//省略getset等通用方法 private int id; private String username; private String pwd; private Date date; } public class APP { @Test public void testBeanUtils() throws E

BeanUtils.populate的作用

它是在org.apache.commons.beanutils.BeanUtils包中的一个方法. 方法的作用:将一些 key-value 的值(例如 hashmap)映射到 bean 中的属性. bean public class User { private String uid; private String username; private String password; private String address; private String status; public St

这是个非常强悍的beanutils工具

注:需要的jar包两个(缺一不可): commons-beanutils-1.8.3.jar:commons-logging-1.1.1.jar package cn.test1; import java.util.Date; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Enumeration; import java.util.UUID; import javax.se

内省Introspector 和BeanUtils 工具对反射属性的包装(简单的不是一点点哦)

public void fun2() throws Exception { //通过反射和dom4j实例化id=stu1的对象,并输出 SAXReader reader = new SAXReader(); Document document = reader.read(this.getClass().getResourceAsStream("/beans.xml")); String xpath="/beans/bean[@id=\"stu1\"]&qu

BeanUtils解决日期问题

1 ConvertUtils.register(new DateLocaleConverter(), Date.class); 2 BeanUtils.populate(user, request.getParameterMap());

利用Java反射实现JavaBean对象相同属性复制并初始化目标对象为空的属性的BeanUtils

有时遇到将数据传输对象转换成JSON串会将属性值为空的属性去掉,利用Java反射实现JavaBean对象数据传输对象的相同属性复制并初始化数据传输对象属性为空的属性,然后转换成JSON串 package com.banksteel.util; import java.lang.reflect.Field;import java.lang.reflect.Method;import java.util.ArrayList;import java.util.Arrays;import java.ut