2024年5月11日发(作者:)

Beanutils基本用法

Beanutils用了魔术般的反射技术,实现了很多夸张有用的功能,都是C/C++时代不

敢想的。无论谁的项目,始终一天都会用得上它。我算是后知后觉了,第一回看到它的时

候居然错过。

1.属性的动态getter,setter

在这框架满天飞的年代,不能事事都保证执行getter,setter函数了,有时候属性是要

需要根据名字动态取得的,就像这样:

perty(myBean,"code");

而BeanUtils更强的功能是直接访问内嵌对象的属性,只要使用点号分隔。

perty(orderBean, "");

相比之下其他类库的BeanUtils通常都很简单,不能访问内嵌的对象,所以经常要用

Commons BeanUtils替换它们。

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

顾客的名字

perty(orderBean, "customers[1].name");

其中BeanUtils会使用ConvertUtils类把字符串转为Bean属性的真正类型,方便从

HttpServletRequest等对象中提取bean,或者把bean输出到页面。而PropertyUtils

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

mpartor 动态排序

还是通过反射,动态设定Bean按照哪个属性来排序,而不再需要在bean的Compare

接口进行复杂的条件判断。

List peoples = ...; // Person对象的列表(peoples, new

BeanComparator("age"));

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

ArrayList sortFields = new ArrayList();(new

BeanComparator("lastName"));

(new BeanComparator("firstName"));

ComparatorChain multiSort = new ComparatorChain(sortFields);

(rows,multiSort);

其中ComparatorChain属于jakata commons-collections包。