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); }
在
BeanUtilsAPI中有一个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);
相关文章推荐
- org.apache.commons.beanutils.PropertyUtils使用明细
- apache-commons之BeanUtils、ConvertUtils、PropertyUtils、CollectionUtils的基本使用
- 使用org.apache.commons.beanutils个人感受
- Apache Commons BeanUtils组件介绍使用
- apache.commons.beanutils转换器的使用
- Apache Commons Beanutils 一 (使用PropertyUtils访问Bean属性)
- Apache commons beanutils简介和使用
- 使用org.apache.commons.beanutils个人感受
- org.apache.commons.beanutils.BeanUtils使用示例
- 使用struts相关组件上传附件(org.apache.commons.fileupload.*)上传附件--详解
- com.qsoft.commons.beanutils源代码(.net版本的org.apache.commons.beanutils)
- org.apache.commons.beanutils.BeanUtils包的具体用法
- 学习使用Commons 之 BeanUtils(1)- -
- apache.commons.beanutils.BeanUtils
- 使用apache的commons-fileupload实现多文件上传
- org.apache.commons.beanutils.BeanUtils 简介
- org.apache.commons.beanutils---操作javabean的工具
- com.qsoft.commons.beanutils源代码(.net版本的org.apache.commons.beanutils)
- org.apache.commons.beanutils.ConversionException:
- 使用org.apache.commons.mail 发送邮