public class Demo {
public static void main(String[] args) throws Exception {
//获取Class对象
Class<?> c = Class.forName("com.qq.java.javabean.Student");
//获取Constructor对象
Constructor<?> constructor = c.getConstructor();
Student stu = (Student) constructor.newInstance();
/*通过反射机制来设置读取JavaBean的属性*/
Method m = c.getMethod("setName",String.class);
m.invoke(stu, "Jack");
m = c.getMethod("getName");
System.out.println(m.invoke(stu));
/*使用内省机制*/
//获取BeanInfo(封装了JavaBean属性的)
BeanInfo beanInfo = Introspector.getBeanInfo(c);
//属性描述器
PropertyDescriptor[] pds = beanInfo.getPropertyDescriptors();
String property = null;
for (PropertyDescriptor pd : pds) {
if (!(property = pd.getName()).equals("class")) {
Method m2 = pd.getWriteMethod(); //获取setXX的方法
if (property.equals("name")) {
m2.invoke(stu, "LiLi");
}
Method m3 = pd.getReadMethod(); //获取getXX的方法
if (property.equals("name")) {
System.out.println(m3.invoke(stu));
}
}
}
/*使用BeanUtils包,一般Utils包里面的方法都是静态的*/
BeanUtils.setProperty(stu, "name", "Wang wu");
System.out.println(BeanUtils.getProperty(stu, "name"));
/*由上面可以看到用BeanUtils包非常方便*/
}
}
因为JavaBean是一个具有public的无参构造方法,私有属性,提供getXX(),setXX()方法的类,所以操作的也是getXX,setXX
用BeanUtils能较为方便的操作JavaBean。