实例1:
@Test
public void test1() throws Exception{
//一个Student类
Student s = new Student();
//"name"与filed名称和set无关,与get的方法有关
PropertyDescriptor pd = new PropertyDescriptor("name",Student.class);
//得到设值方法,即m=setName()
Method m = pd.getWriteMethod();
//执行setName方法,[方法.invoke(作用于哪个对象,参数)],s.setName("jack")
m.invoke(s,"jack");
//得到get方法,即m=getName()
m = pd.getReadMethod();
//执行getName方法,[方法.invoke(作用于哪个对象,参数)],s.setName();null表示无参
String value = (String) m.invoke(s,null);
System.out.println("用户名:" + value);
}
结果:
用户名:jack
实例2:
@Test
public void test2() throws Exception{
//BeanInfo表示JavaBean属性的情况
BeanInfo bi = Introspector.getBeanInfo(Student.class);
//PropertyDescriptor[]表示JavaBean所有属性的集合
PropertyDescriptor[] pds = bi.getPropertyDescriptors();
for(PropertyDescriptor pd : pds){
System.out.println("属性名:" + pd.getName());
}
}
结果:
属性名:age
属性名:class
属性名:name
Student类:
public class Student extends Object {
private String name;
private int age;
public Student() {
}
public String getName() {
return name;
}
public void setName1(String name) {
this.name = name;
}
public int getAge() {
return 30;
}
public void setAge(int age) {
this.age = age;
}
}
总结:
1)在反射的前提下
2)PropertyDescriptor类可以操作JavaBean的存取方法,即(setter和getter)(单个)
3)BeanInfo表示JavaBean属性的情况(所有),PropertyDescriptors
4)属性与getXxxxxx()方法有关,与setXxxxxx()无关
5)任何一个JavaBean都有一个class属性,即Object传入的