您的位置:首页 > 编程语言 > Java开发

内省(Introspector)操作JavaBean的属性

2016-06-05 09:43 423 查看
创建包package cn.itccast.introspector,在包下建javabean类Student,代码如下:

package cn.itccast.introspector;

public class Student {
private String name;
private String password;
private String email;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}

}


在包cn.itccast.introspector下建Demo类,操作Student类的属性

package cn.itccast.introspector;

import java.beans.BeanInfo;
import java.beans.IntrospectionException;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.lang.reflect.Method;

import org.junit.Test;

public class Demo {
//通过内省Introspector的 api操作bean的属性
@Test
public void test() throws Exception{
//1. 通过属性描述器PropertyDescriptor的构造方法获取属性描述器,
//此处获取Student类的name属性描述器
PropertyDescriptor pd=new PropertyDescriptor("name", Student.class);
//2. 获取用于写name属性值的方法,相当于setName(String name)方法
Method write=pd.getWriteMethod();
//3.创建Student对象,设置name属性为maomao
Student stu=new Student();
write.invoke(stu, "maomao");

//4. 获取用于读name属性的方法,相当于getName()方法
Method reader=pd.getReadMethod();

//5. 读取stu的name属性值,并打印,查看是否设置成功
String name=(String) reader.invoke(stu,null);
System.out.println(name);

}

@Test
public void test2() throws IntrospectionException{
//操作Bean的所有属性
//1. 通过Introspector类获得Bean对象的 BeanInfo
BeanInfo bif=Introspector.getBeanInfo(Student.class);
//2.通过 BeanInfo 来获取属性的描述器 PropertyDescriptor
PropertyDescriptor pds[]=bif.getPropertyDescriptors();
//3.通过属性描述器就可以获取某个属性对应的 getter/setter 方法
for(PropertyDescriptor pd: pds){
System.out.println(pd.getName());
}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: