`
xiebh
  • 浏览: 614057 次
  • 性别: Icon_minigender_1
  • 来自: 太原
社区版块
存档分类
最新评论

BeanUtils包学习

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


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


    相比之下其他类库的BeanUtils通常都很简单,不能访问内嵌的对象,所以有时要用Commons BeanUtils来替换它们。

BeanUtils还支持List和Map类型的属性,如下面的语法即可取得Order的顾客列表中第一个顾客的名字

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 = ....
   bean.setB(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 ConstructorUtils,动态创建对象

     
 public static Object invokeConstructor(Class klass, Object arg)

4.2 MethodUtils,动态调用方法

MethodUtils.invokeMethod(bean, methodName, parameter);


4.3 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.4 PropertyUtils,直接获取属性的Class类型

     
 public static Class getPropertyType(Object bean, String name)
分享到:
评论

相关推荐

    beanutils 1.8 jar包+源码_阿锦—小白

    源码的提供使得开发者可以深入理解BeanUtils的工作原理,学习如何利用反射和动态代理技术实现对Java Bean的操作。这对于提升编程技巧,尤其是对于Java基础和设计模式的理解具有极大的价值。通过阅读源码,开发者可以...

    beanUtils包与源码

    现在,让我们深入探讨BeanUtils包的核心功能、工作原理以及如何结合源码来学习和应用。 首先,BeanUtils的核心功能在于属性操作,它提供了`copyProperties()`方法,允许我们快速地将一个Java Bean对象的所有属性值...

    BeanUtils包含源码和jar包, 包含BeanUtils和logging一套拿走,有源码和jar包

    总的来说,这个压缩包提供的BeanUtils源码和jar包对于学习和使用JavaBean操作是非常有价值的。开发者可以通过源码理解其内部机制,增强对Java反射和属性操作的理解;同时,可以直接使用jar包在项目中引入BeanUtils,...

    BeanUtils工具 .jar 包

    在"java学习笔记——javaweb之BeanUtils、EL、JSTL"这篇博客中,作者可能详细讲解了如何在Java Web开发中利用BeanUtils进行数据绑定,以及与EL(Expression Language)和JSTL(JSP Standard Tag Library)的集成。...

    beanutils-1.8.3开发包

    BeanUtils包的核心概念是JavaBeans,这是一种遵循特定设计模式的Java类,主要用于封装数据和提供简单的操作方法。它通过getter和setter方法来访问和修改对象的属性。BeanUtils库则提供了一种便利的方式来操作这些...

    commons-beanutils-1.9.3jar包source包及相关jar包

    `commons-beanutils-1.9.3-sources.jar`则是源代码包,它包含了BeanUtils库的完整源代码,这对于开发者进行调试、学习和自定义扩展非常有用。通过查看源代码,可以深入理解内部的工作机制,以及如何有效地利用这些...

    BeanUtils开发包

    通过阅读源代码,我们可以深入了解BeanUtils内部的工作原理,学习如何使用反射API来操作JavaBean,以及如何设计和实现这样的工具类库。 `commons-beanutils-1.9.2`则是编译后的JAR文件,包含了BeanUtils库的所有...

    Commons BeanUtils包说明

    Apache Commons BeanUtils是Java开发中一个非常实用的工具包,它简化了对象属性之间的操作,提供了大量的静态方法来处理Bean对象。...对于初学者,学习和掌握BeanUtils是提升Java开发技能的重要一步。

    beanUtils jar 包,还包括source和doc

    在Java开发中,BeanUtils是一个非常重要的工具包,尤其在处理对象属性的复制、设置和获取时,它的存在极大地提高了开发效率。BeanUtils是Apache Commons项目的一部分,它提供了一系列方便实用的方法,帮助开发者轻松...

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

    这个"commons-beanutils-1.8.2-src"官方源文件包,是学习和理解BeanUtils核心功能的宝贵资源。在这个版本中,我们可以深入到源代码层面,探究BeanUtils是如何实现对Java Bean属性的便捷访问、复制和转换的。 1. **...

    commons-beanutils-1.8.0.rar源文件及jar包

    在项目中使用Apache Commons BeanUtils,首先需要将其jar包("commons-beanutils-1.8.0.jar")添加到项目的类路径中。然后,可以直接通过import导入相应的类和方法,如`org.apache.commons.beanutils.BeanUtils`,...

    JavaBean和beanutils工具类的学习

    在使用BeanUtils之前,需要将Apache Commons BeanUtils的jar包和Apache Commons Logging的jar包添加到项目依赖中。这两个库可以从Apache官方网站下载,链接在描述中给出。 在示例程序中,`TestJavaBean`类展示了...

    beanutils源码

    2. **核心类分析**:重点关注`org.apache.commons.beanutils`包下的类,如`BeanUtils`、`PropertyUtils`和`ConvertUtils`等,理解它们的功能和实现方式。 3. **反射机制的运用**:深入`java.lang.reflect`包,研究...

    commons-beanutils-1.8.0源码+jar包

    总的来说,Apache Commons BeanUtils 1.8.0的源码和jar包提供了一个深入了解JavaBean操作和早期Java开发实践的机会,无论是在实际开发中解决问题,还是在学习Java技术上,都是一个宝贵的学习资源。

    commons-beanutils-1.9.4.zip

    2. `commons-beanutils-1.9.4-tests.jar`: 包含了BeanUtils库的测试代码,这些测试用例可以帮助开发者理解库的内部工作原理,同时也可以作为示例代码来学习如何使用BeanUtils。 3. `commons-beanutils-1.9.4-...

    beanutils-1.8.3

    源代码可以帮助我们理解内部实现细节,便于学习、调试和可能的定制。如果你需要了解某个功能的具体实现或者遇到问题时,查看源代码可以快速定位问题所在。 Apache Commons BeanUtils库还支持处理复杂的类型转换,...

    commons-beanutils-1.8.2-bin全功能包,包括所需的5个jar文件和官方API

    以下是关于这个包及其包含的内容的详细说明: 1. **BeanUtils库介绍**: Apache Commons BeanUtils库是Apache软件基金会的Jakarta Commons项目的一部分。它的主要目标是简化JavaBeans对象的属性访问,通过提供一...

    BeanUtils教程

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

    commons-beanutils的api文档.rar

    6. **国际化支持**:BeanUtils也考虑到了多语言环境下的应用,它支持资源包(ResourceBundle)的概念,允许开发者根据不同地区的设置来处理Bean的属性。 7. **反射增强**:BeanUtils库利用Java的反射机制,能够在...

    commons-beanutils (1.7.0 -1.9.2)6个

    - `commons-beanutils-1.8.0-sources.jar`:这个文件包含了`1.8.0`版本的源代码,对于开发者来说是极其宝贵的资源,可以通过阅读源码理解内部实现,学习如何优雅地处理Bean操作,甚至进行二次开发。 4. **使用场景...

Global site tag (gtag.js) - Google Analytics