您的位置:首页 > 运维架构 > Apache

Apache Commons beanutils使用

2017-02-14 16:22 323 查看

Apache Commons beanutils使用

Commons BeanUtils下载,并可以查看对应的文档。

BeanUtils
也是Apache Commons家族中的一员,顾名思义,它是用来对Java Bean来进行处理的。一般情况下,在写一个Bean时,我们都要写上
getXX
setXX
方法,这样在读取和写入对象属性值时很方便,但有些场合下,比如动态访问Java对象属性时,上面的写法就不合适了。

以下内容大致翻译自Apache Commons Bean Utils Tutorial

Apache Commons Bean Utils Tutorial

例如,有个名为
Person
JavaBean
,有两个域
name
phone


public class Person {
private String name;
private String phone;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
}


创建
Person
对象,设置域的值和获取域的值,如下:

/**
* Creating the Person object
*/
Person person = new Person();

/**
* setting the Values.
*/
person.setName("Codesuggestions");
person.setPhone("999-999-9999");

/**
* getting the Values.
*/
System.out.println("Person Name is::" + person.getName());
System.out.println("Person Phone is::" + person.getPhone());


现在假设我们不知道field的名称,而我们想设置值,可以通过反射API和
BeanUtils
的API来实现

/**
* getting the Fields using Reflection API.
*/
Field[] fields = person.getClass().getDeclaredFields();

/**
* Settign the Values..
*/
for (Field field : fields) {
System.out.println("Field Name::" + field.getName());
if (field.getName().equalsIgnoreCase("name")) {
BeanUtils.setProperty(person, field.getName(), "codesuggestions");
} else {
BeanUtils.setProperty(person, field.getName(), "999-999-9999");
}
}

/**
* gettign the Values..
*/
for (Field field : fields) {
String property = BeanUtils.getProperty(person, field.getName());
System.out.println("Bean Values Using BeanUtils.getProperty()::" + property);
}


BeanUtils
API中有一个BUG,假设bean有一个field以
A_**
开头,如果调用
BeanUtils.getProperty()
方法,就会抛出一个
java.lang.NoSuchMethodException: Unknown property ‘A_** on class ‘class Person
异常。

其它文章

Apache Commons:BeanUtils介绍

用法

1.克隆对象

Person person2 =  (Person)BeanUtils.cloneBean(person);


将一个Map对象转化为一个Bean

首先这个Map对象的key必须与Bean的属性相对应,还是拿上面Person对象来说,有三个属性name,email,age,那么Map对象中也应当与此对应,如下:

Map map = new HashMap();

map.put(“name”,”tom”);

map.put(“email”,”tom@”);

map.put(“age”,”21”);

//将map转化为一个Person对象

Person person = new Person();

BeanUtils.populate(person,map);


通过上面的一行代码,此时person的属性就已经具有了上面所赋的值了。

那么什么情况下会应用到这种场景呢?如果你做过Web开发,你一定对这样的一个场景很熟悉,那就是我们总是要通过如下的代码来做一些事情:

String name = request.getParameter(“name”);

String age = request.getParameter(“age”);

person.setName(name);

person.setAge(age);


如果经常写的话,觉得很烦吧?这时你就可以应用上面BeanUtils的功能,你可以先得到各参数的名称及对应的值并放入到一个Map对象中,如下:

Enumeration params = request.getParameterNames();

while (params.hasMoreElements()){

String name = (String) params.nextElement();

map.put(name, request.getParameter(name));

}


然后再通过
BeanUtils.populate(person,map);
将map转化为一个对象,这样看上去后是不是觉得相当简洁?而且特别是当参数很多的时候,比如提交了一个庞大的form表单时,这样就更显其强大与简洁!

既然可以将一个map对象转化为一个Bean,当然也可以将一个Bean转化为一个Map对象了,如下:

Map map = BeanUtils.describe(person);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  apache