BeanUtils

-------android培训 java培训  、期待与您交流-------

BeanUtils框架

BeanUtils是阿帕奇(apache)开发的一套提供对JavaBean进行各种操作的框架,
BeanUtils分为4个包:
org.apache.commons.beanutils
org.apache.commons.beanutils.converters
org.apache.commons.beanutils.locale
org.apache.commons.beanutils.locale.converters

org.apache.commons.beanutils
此包主要用于提供操作javbean的工具类
     BeanUtils          JavaBean克隆及属性拷贝 主要jar:commons-beanutils-1.8.3.jar   支持jar:commons-logging-1.1.1.jar(日志记录器)
     PropertyUtils     JavaBean属性拷贝
     ConvertUtils      类型转换
     MethodUtils      JavaBean方法调用
     ConstructorUtils   构造Bean对象
BeanUtils和ProertyUtils的区别
BeanUtils在对Bean赋值时会进行类型转换。也即是说在copyProperty只要属性名相同,就算类型不同,BeanUtils也可以进行copy
PropertyBean则可能会报错

BeanUtils主要方法
BeanUtils可以直接get和set一个属性的值。它将property分成3种类型:
  •         Simple:    简单类型,   如String,Int...
  •         Indexed:  索引类型,   如数组、arrayList....
  •         Maped:   就是指Map,如HashMap....
  •     cloneBean();
  •     copyProperties();
  •     describe();         //用来将一个bean以map的形式展示
  •     populate();        //使用一个map为bean赋值
  •     setProperty(Obj bean,String name,Obj value);
  •     getProperty();

BeanUtils更强大的功能是直接访问内嵌对象的属性
BeanUtils示例代码
public class Person {//javaBean 
private String name;//字段
private String password;//字段
private int age;//字段
private Date birthday;//字段

public Date getBirthday() { 
               return birthday;  }
public void setBirthday(Date birthday) { 
               this.birthday = birthday;  }
public String getAb() {
               return null;  }
public String getName() {
return name; }
public void setName(String name) {
this.name = name; }
public String getPassword() {
return password; }
public void setPassword(String password) {
this.password = password; }
public int getAge() {
return age; }
public void setAge(int age) {
this.age = age; }
}
使用beanUtils操作bean的属性
public class Demo1 {

@Test
public void test1() throws Exception {
 Person p = new Person();
 BeanUtils. setProperty(p, "name", "张三");
 System.out.println(p.getName()); //输出 :张三
}
@Test
public void test2() throws Exception {
    *  客户提交的数据--String类型
 String name = "张三";
 String password = "abcd123";
 String age = "38";
 String birthday = "1980-09-09";
 Person p = new Person();
  *  将客户提交的name这个对象的值封装到Bean对象p的"name"属性里,
  * 这样就可以通过p的方法对用户的数据进行set和get操作
                  * "age"属性接收的是int类型的值,这里BeanUtils对客户提交的String类
                  *  型的age进行了数据类型转换操作,但此种转换操作只支持八种基本数据类型
BeanUtils. setProperty(p, "name", name);
BeanUtils. setProperty(p, "password", password);
BeanUtils. setProperty(p, "age", age);
BeanUtils. setProperty(p, "birthday", birthday);
System.out.println(p.getName());
System.out.println(p.getPassword());
System.out.println(p.getAge());
 * 因为BeanUtils只支持八种基本数据类型的转换,而birthday是data类型
                   * 所以下面操作将引发java.lang.IllegalArgumentException: 异常
System.out.println(p.getBirthday());
}
@Test
  *   自己注册转换器
public void test3() throws Exception {
*     客户提交的数据--String类型
String name = "张三";
String password = "abcd123";
String age = "38";
String birthday = "1980-09-09";

  * 虽然BeanUtils不支持除了八种基本数据类型之外的转换操作,
  *  但是BeanUtils提供了转换器ConvertUtils,
  * ConvertUtils这个工具类提供了register可以对转换器进行注册
ConvertUtils. register(new Converter() {
public Object convert(Class type, Object value) {

 * 判断数据是否为空
if (value == null) {
return null;
}
 * 判断数据是否是String
if (!(value instanceof String)) {
throw new ConversionException("只支持String类型的转换");
}
String str = (String) value;
 * 判断数据是否是空白字符串
if (str.trim().equals("")) {
return null;
}
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
try {
return sdf.parse(str);
} catch (ParseException e) {
throw new RuntimeException(e); // 异常链不能断
}
}
}, Date.class);

 Person p = new Person();
  BeanUtils. setProperty(p, "name", name);
  BeanUtils. setProperty(p, "password", password);
  BeanUtils. setProperty(p, "age", age);
  BeanUtils. setProperty(p, "birthday", birthday);
 System.out.println(p.getName());
 System.out.println(p.getPassword());
 System.out.println(p.getAge());
 System.out.println(p.getBirthday());
}
@Test
   *  利用BeanUtils自带的转换器
public void test4() throws Exception {
*     客户提交的数据--String类型
String name = "张三";
String password = "abcd123";
String age = "38";
String birthday = "1980-09-09";

 *  BeanUtils自带的转换器DateLocaleConverter
ConvertUtils.register(new DateLocaleConverter(), Date.class);
Person p = new Person();
                 BeanUtils. setProperty(p, "name", name);

  BeanUtils. setProperty(p, "password", password);
  BeanUtils. setProperty(p, "age", age);
  BeanUtils. setProperty(p, "birthday", birthday);
 System.out.println(p.getName());
 System.out.println(p.getPassword());
 System.out.println(p.getAge());
 System.out.println(p.getBirthday());
}
@Test
public void test5() throws IllegalAccessException,InvocationTargetException {
 Map map = new HashMap();
 map.put("name", "张三");
 map.put("password", "abc123");
 map.put("age", "33");
 map.put("birthday", "1980-09-09");

 ConvertUtils.register(new DateLocaleConverter(), Date.class);

 Person p = new Person();
  * 将Map集合里的数据填充到Bean的p对象里,
                  * 也就是用Map集合中的值填充Bean属性,
  * 进行填充时,Map集合中的键key必须与Bean的属性名相对应,
                  *  即如果Map集合里有"name"这个键,
  * Bean中必须有对应的name属性。
   BeanUtils. populate(p, map);

System.out.println(p.getName());
System.out.println(p.getPassword());
System.out.println(p.getAge());
System.out.println(p.getBirthday());
}
}

        
PropertyUtils主要方法
这个类和BeanUtils类很多的方法在参数上都是相同的,但返回值不同。
BeanUtils着重于“Bean”,返回值通常是String,
PropertyUtils着重于属性,返回值通常是Object

  •     copyProperties();
  •     describe();
  •     setProperty();
  •     getProperty();

MethodUtils主要方法
动态调用方法,得到方法,主要方法有

  •    invokeMethod                     //动态调用方法
  •    getAccessibleMethod         //得到方法
  •    isAssignmentCompatible

ConstructorUtils主要方法
这个类中的主要方法分为两种,一种是得到构造方法,一种是创建对象。

  • invokeConstructor                  //创建对象
  • getAccessibleConstructor      //得到构造方法

ConvertUtils
将字符串转换成指定类型

  • convert(Object value)
将任意的实例转换成String,用法非常简单相当于调用toString()方法
  • convert(String  value, Class  clazz)
将字符串value转换成clazz的一个实例,如果失败,将以String的形式返回value
  • convert(String[] values,Class clazz)
这个方法是对前一方法的加强版,将数组中的每个value都进行转换,最后以Object返回



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值