java内省Introspector
Posted liuboyuan
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java内省Introspector相关的知识,希望对你有一定的参考价值。
大纲:
- JavaBean 规范
- 内省
一、JavaBean 规范
JavaBean —般需遵循以下规范。
- 实现 java.io.Serializable 接口。
- javaBean属性是具有getter/setter方法的private成员变量。也可以只提供getter方法,这样的属性叫只读属性;也可以只提供setter方法,这样的属性叫只写属性。
- JavaBean 必须有一个空的构造函数
- JavaBean 必须有一个public构造函数
二、内省
- 首先内省的本质也是利用反射
- 通过内省可以快速拿到javaBean变量的getter与setter,从而快速操作bean对象。
测试用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;
1.可以通过BeanInfo对象拿到JavaBean类中所有属性和方法的描述器
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());
2.直接获取某个属性的描述器
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));
以上是关于java内省Introspector的主要内容,如果未能解决你的问题,请参考以下文章