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基本用法详解 #### 一、Beanutils简介 Beanutils是一个强大的Java工具类库,主要用于简化JavaBean的属性操作。它提供了一系列的方法帮助开发者处理Bean的属性读取、设置以及转换等问题,尤其在处理...
2. **类型转换**:BeanUtils库能够自动处理基本数据类型的转换,如将字符串转换为整型或浮点型。这在处理来自网络请求的数据时特别有用,因为请求参数通常是字符串形式,需要转化为对应的Java类型。 3. **异常处理*...
- **PropertyDescriptor**:BeanUtils内部使用了JavaBeans的`PropertyDescriptor`,它描述了一个Bean的属性,包括其getter和setter方法。 - **反射机制**:BeanUtils大量利用Java的反射API来动态地获取和设置Bean...
例如,我们有一个源对象`sourceBean`和目标对象`targetBean`,它们具有相同的属性结构,我们可以使用`BeanUtils.copyProperties()`方法来快速完成两个对象属性的复制: ```java try { BeanUtils.copyProperties...
BeanUtils库是基于JavaBeans规范的,JavaBeans是一种符合特定规则的Java类,它们通常具有公有的getter和setter方法,用于封装和解封装对象的数据。 **BeanUtils的核心功能:** 1. **属性设置和获取:** BeanUtils...
通过本文的学习,我们不仅了解了 `BeanUtils` 的基本用法和核心功能,而且还深入探讨了其实现机制。`BeanUtils` 作为一种强大的工具库,在实际开发中有着广泛的应用场景。无论是进行简单的 Bean 属性复制还是复杂的...
4. **复制属性**: `BeanUtils.copyProperties()`方法可以将一个JavaBean的属性值复制到另一个JavaBean中,这在创建对象的副本或者进行对象间的数据迁移时非常有用。 5. **集合操作**: BeanUtils还支持与集合对象...
8. **Thread Safety**:由于BeanUtils中的许多方法都是静态的,因此在多线程环境中使用时需要注意线程安全问题。通常,这些工具类在设计时已经考虑到了线程安全,但在某些特定场景下可能需要额外的同步措施。 9. **...
- 自定义Converter时,要注意注册过程,通常需要创建`BeanUtilsBean`实例,而不是直接使用`BeanUtils`的静态方法。 总之,Apache Commons BeanUtils是Java开发中一个强大的工具,它可以极大地简化JavaBean的属性...
- `commons-beanutils`常与`commons-collections`和`commons-lang`等Apache Commons库结合使用,提供更强大的功能,如集合操作和字符串处理。 总之,`commons-beanutils`是Java开发中的一个重要工具,它的各种版本...
源码阅读时,我们不仅可以了解BeanUtils的基本工作流程,还可以学习到设计模式的应用,如工厂模式(用于创建Converter实例)、装饰器模式(用于增强方法的行为)以及反射和代理技术的使用。此外,通过对异常处理的...
1. `commons-beanutils-1.9.4-javadoc.jar`:这是项目API的Java文档,包含了所有公共类和方法的详细说明,对于开发者理解和使用BeanUtils库非常有帮助。通过查看这个文档,开发者可以了解到每个类、接口以及它们的...
3. **文档**:可能包括API文档(通常为`javadoc`格式),这些文档详细描述了每个类、接口和方法的功能,帮助开发者理解和使用BeanUtils库。 4. **构建文件**:如`build.xml`,这是Ant构建工具的配置文件,用于编译...
4. 类型转换:BeanUtils Core还包含了一些基本类型的转换方法,如`convert(String value, Class<?> toType)`,可以自动将字符串转换为指定类型。 三、文件结构解析 在"commons-beanutils-core-1.7.0.zip"压缩包中...
《Apache Commons BeanUtils库详解与应用》 Apache Commons BeanUtils是Java开发中广泛使用的开源工具库,它简化了JavaBean对象的操作,提供...在实际开发中,掌握其使用方法对于提高代码质量和可维护性具有重要意义。
2. `commons-beanutils-core-1.8.0.jar`:这个库是BeanUtils的核心部分,包含了BeanUtils的基本功能,如属性的读写、类型转换等。与主库配合使用,可以提供更完整的Java Bean操作支持。 3. `commons-logging-1.2....
- 数据类型转换:源对象的属性值可能需要自动转换为与目标对象相应的数据类型,BeanUtils通常能自动处理基本类型转换,但复杂类型转换可能需要自定义转换器。 - 避免无限递归:如果源对象和目标对象之间存在循环引用...
2. **类型转换**:BeanUtils自动处理基本数据类型与包装类型之间的转换,以及字符串到其他类型(如日期、枚举等)的转换。这使得在处理用户输入或从数据库读取数据时,可以更方便地将字符串转化为预期的数据类型。 ...
下面我们将详细探讨BeanUtils的核心功能和使用方法。 1. **对象属性拷贝** BeanUtils最核心的功能就是实现对象间的属性拷贝。它提供了`copyProperties()`方法,可以将一个JavaBean对象的属性值复制到另一个...
除了基本的属性操作,BeanUtils还提供了`CopyProperties`方法,用于对象间的属性复制。这个功能在对象克隆、数据转换等场景下非常有用。只需传入源对象和目标对象,就能将源对象的所有可写属性复制到目标对象,极大...