`
yalong9527
  • 浏览: 78395 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Beanutils基本用法[转载]

    博客分类:
  • JAVA
阅读更多
Beanutils基本用法

Beanutils用了魔术般的反射技术,实现了很多夸张有用的功能,都是C/C++时代不敢想的。无论谁的项目,始终一天都会用得上它。我算是后知后觉了,第一回看到它的时候居然错过。

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);

4.5 动态Bean 见用DynaBean减除不必要的VO和FormBean
分享到:
评论

相关推荐

    Beanutils基本用法.doc

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

    beanutils使用

    现在,我们可以创建一个Map对象并填充数据,然后使用BeanUtils的`populate()`方法: ```java Map, Object> map = new HashMap(); map.put("name", "张三"); map.put("age", 25); MyBean myBean = new MyBean(); ...

    beanutils包

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

    Commons BeanUtils 1.8.3 API

    例如,当需要将数据库查询结果映射到Java Bean对象时,使用BeanUtils的`populate()`方法可以快速完成这一任务。同时,由于BeanUtils库是Apache Commons的一部分,它经过了广泛测试和社区的验证,可靠性较高。 总结...

    BeanUtils-jar包

    通过熟练掌握BeanUtils的用法,开发者可以更高效地处理对象属性的读取、设置和复制,进一步提升开发效率。在实际项目中,合理利用BeanUtils-jar包,可以有效地减少重复代码,使程序设计更加简洁和灵活。

    commons-beanutils-1.9.4-API文档-中文版.zip

    赠送jar包:commons-beanutils-1.9.4.jar;...使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。

    commons-beanutils-1.8.0

    通过使用BeanUtils,开发者可以避免编写大量重复的getter和setter方法,从而提高开发效率。 在`commons-beanutils-1.8.0.jar`中,主要类有`BeanUtils`和`PropertyUtils`。`BeanUtils`类提供了简单易用的API,如`...

    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_

    BeanUtils 是 Apache commons组件的成员之一,主要用于简化JavaBean封装数据的操作。它可以给JavaBean封装一个字符串数据,也可以将一个表单提交的所有数据封装到JavaBean中。使用第三方工具,需要导入jar包:

    commons-beanutils-1.9.4

    在本文中,我们将深入探讨`commons-beanutils-1.9.4`这个版本,了解其核心功能、使用场景以及如何在项目中集成和应用。 Apache Commons BeanUtils库的主要目标是简化JavaBean对象的属性访问。它通过提供一系列静态...

    beanutils 的jar包

    本文将深入探讨BeanUtils的核心功能及使用方法。 BeanUtils是Apache Commons项目的一部分,它的主要目标是提供一套便捷的工具方法,用于处理JavaBean对象。JavaBean是一种遵循特定设计规范的Java类,通常包含公共的...

    BeanUtils包

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

    beanutils-1.8.3开发包

    Apache BeanUtils库是Java开发中的...不过,由于BeanUtils使用反射,可能存在一定的性能损耗,因此在性能敏感的应用中需要谨慎使用。同时,由于其依赖于JavaBeans规范,对于非JavaBeans对象的操作可能需要额外的适配。

    beanutils-logging.zip

    1. **属性复制**:BeanUtils.copyProperties()方法能够将一个JavaBean的所有属性值复制到另一个同类型的JavaBean中,极大地提高了代码的复用性和可维护性。 2. **动态调用setter/getter**:通过反射机制,BeanUtils...

    commons-beanutils 源码

    - **属性访问**:BeanUtils提供了`getProperty()`和`setProperty()`方法,可以方便地读取和设置JavaBean对象的属性值,无需关注getter和setter方法的具体实现。 - **类型转换**:BeanUtils具备自动类型转换的能力...

    BeanUtils工具

    BeanUtils工具是一种方便我们对JavaBean进行操作的工具,是Apache组织下的产品。beanUtils 可以便于对javaBean的属性、对象进行赋值,beanUtils可以将一个MAP集合的数据拷贝到一个javabean对象中。

Global site tag (gtag.js) - Google Analytics