java内省(Introspector)简介及实例
java内省简介
内省是 Java 语言对 Bean 类属性、事件的一种缺省处理方法。例如类 A
中有属性 name, 那我们可以通过 getName,setName 来得到其值或者设置新的值。
通过 getName/setName 来访问 name 属性,这就是默认的规则。 Java 中提供了一
套 API 用来访问某个属性的 getter/setter 方法,通过这些 API 可以使你不需要
了解这个规则(但你最好还是要搞清楚),这些 API 存放于包 java.beans 中。
java内省实例演示
一般的做法是通过类 Introspector 来获取某个对象的 BeanInfo 信息,然
后通过 BeanInfo 来获取属性的描述器( PropertyDescriptor ),通过这个属性
描述器就可以获取某个属性对应的 getter/setter 方法,然后我们就可以通过反射
机制来调用这些方法。下面我们来看一个例子,这个例子把某个对象的所有属性名称
和值都打印出来,可以分为以下几个步骤:
1,通过Introspector类获得Bean对象的 BeanInfo, 然后通过
BeanInfo 来获取属性的描述器( PropertyDescriptor )
2,通过这个属性描述器就可以获取某个属性对应的
getter/setter 方法
3,然后通过反射机制来调用这些方法。
实例
/*
* 通过Introspector类获得Bean对象的 BeanInfo, 然后通过 BeanInfo
来获取属性的描述器(
* PropertyDescriptor ) 通过这个属性描述器就可以获取某个属性对
应的 getter/setter 方法,
* 然后通过反射机制来调用这些方法。
*/
@Test
public void test() throws IntrospectionException,
IllegalArgumentException,
IllegalAccessException,
InvocationTargetException {
Student st = new Student();
// 1、通过Introspector类获得Bean对象的 BeanInfo,
BeanInfo entity = Introspector.getBeanInfo
(Student.class);
// 2、然后通过 BeanInfo 来获取属性的描述器(
PropertyDescriptor )
PropertyDescriptor pdrs[] =
entity.getPropertyDescriptors();
// 3、通过这个属性描述器就可以获取某个属性对应的
getter/setter 方法,
for (PropertyDescriptor pd : pdrs) {
// System.out.println(pd.getName());
/*
* System.out.println(pd.getShortDescription
());
* System.out.println(pd.getDisplayName());
*/
if (pd.getName().equals("age")) {
Method md = pd.getWriteMethod();
md.invoke(st, 12);
}
}
// System.out.println(st.getAge());
}