import java.lang.reflect.InvocationTargetException;
import java.util.HashMap;
import java.util.Map;
import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.beanutils.ConvertUtils;
public class Test {
public static void main(String[] args) {
Person person = new Person();
person.setName(“tom”);
person.setAge(21);
try {
//克隆,仅此一行而已!
Person person2 = (Person)BeanUtils.cloneBean(person);
System.out.println(person2.getName()+”>>”+person2.getAge());
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
}
}
}
通过追查其源码,我们可以发现其原理也是通过Java的反射机制来做的,这不足为奇,因为我们所做的一切都是以Java Api为基础的,就看你能否将其封装得非常好,就如同BeanUtils所做的这样。 2、 将一个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对象中,如下: