今天学习了Apache编写的Beanutils工具的基本使用方法,使用步骤如下:
1)官网下载2各工具Beanutils及Logging 解压后将两个工具的主要文件拷贝至工程lib目录下
2)右键beanutils及logging jar工具,依照下图加入Build path
能看到如下状态
3)编写了person.java的 javabean类以及测试类IntroSepectorDemo.java 同时导入beanutils的jar包
package JavaBean;
import java.beans.IntrospectionException;
import java.beans.PropertyDescriptor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import org.apache.commons.beanutils.BeanUtils;
public class IntroSpectorDemo {
public static void main(String[] args) throws Exception {
person p = new person("zhangsan", 24);
String str = BeanUtils.getProperty(p, "name");
System.out.println(str);
}
}
person类
package JavaBean;
class person {
private String name1;
private int age;
public String getName() {
return name1;
}
public void setName(String name) {
this.name1 = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public person(String name, int age) {
super();
this.name1 = name;
this.age = age;
}
}
运行提示找不到getter name方法
明明是有方法的,为啥提示找不到呢,最终经过百度查询在某论坛高人指点javabean类应该使用public进行修饰
程序修改后,运行成功!
最后再附加上BeanUtils的2种最常用的方法populate 和 describe,可以将Bean中属性转换为Map对象,测试代码如下
package JavaBean;
import java.beans.PropertyDescriptor;
import java.lang.reflect.InvocationTargetException;
import java.util.HashMap;
import java.util.Map;
import org.apache.commons.beanutils.BeanUtils;
public class beanutilDemo {
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
//初始化m类型为Map
Map<String,String> m = new HashMap<String,String>();
//往Map中存入键值对
m.put("name", "zhangsan");
m.put("age", "24");
//初始化p对象类型为person
person p = new person();
//用m的属性map给p对象赋值,使用Bean工具的populate方法
BeanUtils.populate(p, m);
//打印赋值结果
System.out.println(p.getName());
System.out.println(p.getAge());
//建立另外一个p1对象并进行初始化值
person p1 = new person("张三", 28);
//通过Beanutils的describe方法将p1对象的属性存为map对象m1
Map<String,String> m1 = BeanUtils.describe(p1);
//用m1的属性map给p对象赋值,使用Bean工具的populate方法
BeanUtils.populate(p, m1);
//打印赋值结果
System.out.println(p.getName());
System.out.println(p.getAge());
}
}
运行结果如下: