java内省Introspector
2020-12-13 04:45
标签:直接 利用 getter 成员变量 row throw this getname stat JavaBean —般需遵循以下规范。 测试用javaBean 1.可以通过BeanInfo对象拿到JavaBean类中所有属性和方法的描述器 2.直接获取某个属性的描述器 java内省Introspector 标签:直接 利用 getter 成员变量 row throw this getname stat 原文地址:https://www.cnblogs.com/liuboyuan/p/11120481.html大纲:
一、JavaBean 规范
二、内省
public class Person {
private String name ;
private int age ;
public void say(){
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
public static void main(String[] args) throws Exception {
//获取BeanInfo对象,主要用于获取javaBean的属性描述器
BeanInfo beanInfo = Introspector.getBeanInfo(Person.class);
//方法描述器
MethodDescriptor[] methodDescriptors = beanInfo.getMethodDescriptors();
//属性描述器
PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
//测试对象
Person person = new Person();
for (PropertyDescriptor propertyDescriptor : propertyDescriptors) {
//属性名
System.out.println("Person的属性:"+propertyDescriptor.getName());
if("name".equals(propertyDescriptor.getName())){
//属性读方法
Method readMethod = propertyDescriptor.getReadMethod();
//属性的写方法
Method writeMethod = propertyDescriptor.getWriteMethod();
writeMethod.invoke(person,"xiaoming");
System.out.println("person的name:"+readMethod.invoke(person));
Class> propertyType = propertyDescriptor.getPropertyType();
System.out.println("属性的类型:"+propertyType.getName());
}
}
}
public static void main(String[] args) throws Exception {
Person p = new Person();
//直接通过名称获取属性描述器
//获取name属性的描述器,方便我们直接操作p对象的name属性。
PropertyDescriptor descriptor = new PropertyDescriptor("name", Person.class);
Method writeMethod = descriptor.getWriteMethod();
writeMethod.invoke(p,"nananan");
System.out.println("person对象name:"+descriptor.getReadMethod().invoke(p));
}