`

Beanutils的基本用法

 
阅读更多

1.属性的动态getter,setter

 

在这框架满天飞的年代,不能事事都保证执行getter,setter函数了,有时候属性是要需要根据名字动态取得的,就像这样:  
BeanUtils.getProperty(myBean,"code");

 

而BeanUtils更强的功能是直接访问内嵌对象的属性,只要使用点号分隔。
BeanUtils.getProperty(orderBean, "address.city");

 

相比之下其他类库的BeanUtils通常都很简单,不能访问内嵌的对象,所以经常要用Commons BeanUtils替换它们。
BeanUtils还支持List和Map类型的属性。如下面的语法即可取得顾客列表中第一个顾客的名字
BeanUtils.getProperty(orderBean, "customers[1].name");

 

其中BeanUtils会使用ConvertUtils类把字符串转为Bean属性的真正类型,方便从HttpServletRequest等对象中提取bean,或者把bean输出到页面。

 

而PropertyUtils就会原色的保留Bean原来的类型。

2.beanCompartor 动态排序

还是通过反射,动态设定Bean按照哪个属性来排序,而不再需要在bean的Compare接口进行复杂的条件判断。
List peoples = ...; // Person对象的列表Collections.sort(peoples, new BeanComparator("age"));

如果要支持多个属性的复合排序,如"Order By lastName,firstName"

ArrayList sortFields = new ArrayList();sortFields.add(new BeanComparator("lastName"));
sortFields.add(new BeanComparator("firstName"));
ComparatorChain multiSort = new ComparatorChain(sortFields);
Collections.sort(rows,multiSort);

其中ComparatorChain属于jakata commons-collections包。
如果age属性不是普通类型,构造函数需要再传入一个comparator对象为age变量排序。
另外, BeanCompartor本身的ComparebleComparator, 遇到属性为null就会抛出异常, 也不能设定升序还是降序。
这个时候又要借助commons-collections包的ComparatorUtils.

Comparator mycmp = ComparableComparator.getInstance();
mycmp = ComparatorUtils.nullLowComparator(mycmp); //允许null
mycmp = ComparatorUtils.reversedComparator(mycmp); //逆序
Comparator cmp = new BeanComparator(sortColumn, mycmp);

3.Converter 把Request或ResultSet中的字符串绑定到对象的属性

经常要从request,resultSet等对象取出值来赋入bean中,下面的代码谁都写腻了,如果不用MVC框架的绑定功能的话。

   String a = request.getParameter("a");   bean.setA(a);   String b = ....

不妨写一个Binder:

     MyBean bean = ...;    HashMap map = new HashMap();    Enumeration names = request.getParameterNames();    while (names.hasMoreElements())    {      String name = (String) names.nextElement();      map.put(name, request.getParameterValues(name));    }    BeanUtils.populate(bean, map);

其中BeanUtils的populate方法或者getProperty,setProperty方法其实都会调用convert进行转换。
但Converter只支持一些基本的类型,甚至连java.util.Date类型也不支持。而且它比较笨的一个地方是当遇到不认识的类型时,居然会抛出异常来。
对于Date类型,我参考它的sqldate类型实现了一个Converter,而且添加了一个设置日期格式的函数。
要把这个Converter注册,需要如下语句:

    ConvertUtilsBean convertUtils = new ConvertUtilsBean();
    DateConverter dateConverter = new DateConverter();
    convertUtils.register(dateConverter,Date.class);



//因为要注册converter,所以不能再使用BeanUtils的静态方法了,必须创建BeanUtilsBean实例
BeanUtilsBean beanUtils = new BeanUtilsBean(convertUtils,new PropertyUtilsBean());
beanUtils.setProperty(bean, name, value);
4 其他功能
4.1 PropertyUtils,当属性为Collection,Map时的动态读取:
Collection: 提供index
BeanUtils.getIndexedProperty(orderBean,"items",1);
或者
BeanUtils.getIndexedProperty(orderBean,"items[1]");

Map: 提供Key Value
BeanUtils.getMappedProperty(orderBean, "items","111");//key-value goods_no=111
或者
BeanUtils.getMappedProperty(orderBean, "items(111)")
4.2 PropertyUtils,获取属性的Class类型
     public static Class getPropertyType(Object bean, String name)
4.3 ConstructorUtils,动态创建对象
      public static Object invokeConstructor(Class klass, Object arg)
4.4 MethodUtils,动态调用方法
    MethodUtils.invokeMethod(bean, methodName, parameter);

分享到:
评论

相关推荐

    Beanutils基本用法.doc

    ### Beanutils基本用法详解 #### 一、Beanutils简介 Beanutils是一个强大的Java工具类库,主要用于简化JavaBean的属性操作。它提供了一系列的方法帮助开发者处理Bean的属性读取、设置以及转换等问题,尤其在处理...

    beanutils包

    2. **类型转换**:BeanUtils库能够自动处理基本数据类型的转换,如将字符串转换为整型或浮点型。这在处理来自网络请求的数据时特别有用,因为请求参数通常是字符串形式,需要转化为对应的Java类型。 3. **异常处理*...

    commons-beanutils-1.8.2-src官方源文件,是你学习beanutils工具的必备资料

    - **PropertyDescriptor**:BeanUtils内部使用了JavaBeans的`PropertyDescriptor`,它描述了一个Bean的属性,包括其getter和setter方法。 - **反射机制**:BeanUtils大量利用Java的反射API来动态地获取和设置Bean...

    beanutils的jar包

    例如,我们有一个源对象`sourceBean`和目标对象`targetBean`,它们具有相同的属性结构,我们可以使用`BeanUtils.copyProperties()`方法来快速完成两个对象属性的复制: ```java try { BeanUtils.copyProperties...

    BeanUtils包

    BeanUtils库是基于JavaBeans规范的,JavaBeans是一种符合特定规则的Java类,它们通常具有公有的getter和setter方法,用于封装和解封装对象的数据。 **BeanUtils的核心功能:** 1. **属性设置和获取:** BeanUtils...

    BeanUtils教程

    通过本文的学习,我们不仅了解了 `BeanUtils` 的基本用法和核心功能,而且还深入探讨了其实现机制。`BeanUtils` 作为一种强大的工具库,在实际开发中有着广泛的应用场景。无论是进行简单的 Bean 属性复制还是复杂的...

    commons-beanutils所有版本(1.0-1.9.2).zip

    4. **复制属性**: `BeanUtils.copyProperties()`方法可以将一个JavaBean的属性值复制到另一个JavaBean中,这在创建对象的副本或者进行对象间的数据迁移时非常有用。 5. **集合操作**: BeanUtils还支持与集合对象...

    commons-beanutils-1.8.0.zip

    8. **Thread Safety**:由于BeanUtils中的许多方法都是静态的,因此在多线程环境中使用时需要注意线程安全问题。通常,这些工具类在设计时已经考虑到了线程安全,但在某些特定场景下可能需要额外的同步措施。 9. **...

    beanutils高手学习笔记,重要的学习笔记,想提高的看

    - 自定义Converter时,要注意注册过程,通常需要创建`BeanUtilsBean`实例,而不是直接使用`BeanUtils`的静态方法。 总之,Apache Commons BeanUtils是Java开发中一个强大的工具,它可以极大地简化JavaBean的属性...

    commons-beanutils (1.7.0 -1.9.2)6个

    - `commons-beanutils`常与`commons-collections`和`commons-lang`等Apache Commons库结合使用,提供更强大的功能,如集合操作和字符串处理。 总之,`commons-beanutils`是Java开发中的一个重要工具,它的各种版本...

    commons-beanutils-1.7.0-src.zip

    源码阅读时,我们不仅可以了解BeanUtils的基本工作流程,还可以学习到设计模式的应用,如工厂模式(用于创建Converter实例)、装饰器模式(用于增强方法的行为)以及反射和代理技术的使用。此外,通过对异常处理的...

    commons-beanutils-1.9.4.zip

    1. `commons-beanutils-1.9.4-javadoc.jar`:这是项目API的Java文档,包含了所有公共类和方法的详细说明,对于开发者理解和使用BeanUtils库非常有帮助。通过查看这个文档,开发者可以了解到每个类、接口以及它们的...

    commons-beanutils-1.8.0.rar

    3. **文档**:可能包括API文档(通常为`javadoc`格式),这些文档详细描述了每个类、接口和方法的功能,帮助开发者理解和使用BeanUtils库。 4. **构建文件**:如`build.xml`,这是Ant构建工具的配置文件,用于编译...

    commons-beanutils-core-1.7.0.zip

    4. 类型转换:BeanUtils Core还包含了一些基本类型的转换方法,如`convert(String value, Class<?> toType)`,可以自动将字符串转换为指定类型。 三、文件结构解析 在"commons-beanutils-core-1.7.0.zip"压缩包中...

    commons-beanutils-1.8.3-bin+logging.rar

    《Apache Commons BeanUtils库详解与应用》 Apache Commons BeanUtils是Java开发中广泛使用的开源工具库,它简化了JavaBean对象的操作,提供...在实际开发中,掌握其使用方法对于提高代码质量和可维护性具有重要意义。

    BeanUtils的jar包们.zip

    2. `commons-beanutils-core-1.8.0.jar`:这个库是BeanUtils的核心部分,包含了BeanUtils的基本功能,如属性的读写、类型转换等。与主库配合使用,可以提供更完整的Java Bean操作支持。 3. `commons-logging-1.2....

    commons-beanutils-1.8.3-bin.tar.gz

    - 数据类型转换:源对象的属性值可能需要自动转换为与目标对象相应的数据类型,BeanUtils通常能自动处理基本类型转换,但复杂类型转换可能需要自定义转换器。 - 避免无限递归:如果源对象和目标对象之间存在循环引用...

    commons-beanutils-1.8.0的jar包(全).rar

    2. **类型转换**:BeanUtils自动处理基本数据类型与包装类型之间的转换,以及字符串到其他类型(如日期、枚举等)的转换。这使得在处理用户输入或从数据库读取数据时,可以更方便地将字符串转化为预期的数据类型。 ...

    beanUtils全套JAR包

    下面我们将详细探讨BeanUtils的核心功能和使用方法。 1. **对象属性拷贝** BeanUtils最核心的功能就是实现对象间的属性拷贝。它提供了`copyProperties()`方法,可以将一个JavaBean对象的属性值复制到另一个...

    commons-beanutils-1.8.0-BETA.zip

    除了基本的属性操作,BeanUtils还提供了`CopyProperties`方法,用于对象间的属性复制。这个功能在对象克隆、数据转换等场景下非常有用。只需传入源对象和目标对象,就能将源对象的所有可写属性复制到目标对象,极大...

Global site tag (gtag.js) - Google Analytics