commons-beanutils是通过内省来完成的。
需要两个包:
- commons-beanutils-1.8.3.jar
- commons-logging-1.1.1.jar
JavaBean类:
package cn.zy.study; /** * 提供get和set方法 * 并有一个无参的构造方法 * @author zy * */ public class Person { private String name; private int age; private String gender; public Person() { } public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public String toString() { return "Person [name=" + name + ", age=" + age + ", gender=" + gender + "]"; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getGender() { return gender; } public void setGender(String gender) { this.gender = gender; } }
对bean类的操作
package cn.test; import java.lang.reflect.InvocationTargetException; import java.util.HashMap; import java.util.Map; import org.apache.commons.beanutils.BeanUtils; import org.junit.Test; import cn.zy.study.Person; public class Demo3 { @Test public void fun1() throws ClassNotFoundException, InstantiationException, IllegalAccessException, InvocationTargetException, NoSuchMethodException{ //用Class类的forName方法来获取对应的class对象 String className = "cn.zy.study.Person"; Class clazz = Class.forName(className); //使用clazz对应类的默认构造器创造实例 Object bean = clazz.newInstance(); /**使用beanutils工具设置bean类的属性值, * 所有的属相值都可以设置成String类型,将会自动转换 * 没有设置属性的值将为null */ BeanUtils.setProperty(bean, "name", "Scott"); BeanUtils.setProperty(bean, "age", "17"); System.out.println(bean); //得到bean类的属性值,注意属值都将变成String类型 String name = BeanUtils.getProperty(bean, "name"); String age = BeanUtils.getProperty(bean, "age"); } @Test /** * 将map直接封装到一个bean中 */ public void fun2() throws InstantiationException, IllegalAccessException, InvocationTargetException{ Map<String,String> map = new HashMap(); map.put("name","Scott"); map.put("age","15"); //利用类的class属性来获取Class对象,并创建 Person bean = Person.class.newInstance(); //将map数据填充到Javabean中 BeanUtils.populate(bean, map); System.out.println(bean); } }