计算机二级辅导:java内省机制计算机等级考试
文章作者 100test 发表时间 2010:01:01 12:19:38
来源 100Test.Com百考试题网
内省是 Java 语言对 Bean 类属性、事件的一种处理方法(也就是说给定一个javabean对象,我们就可以得到/调用它的所有的get/set方法)。
例如类 A 中有属性 name, 那我们可以通过 getName,setName 来得到其值或者设置新的值。通过 getName/setName 来访问 name 属性,这就是默认的规则。
Java 中提供了一套 API 用来访问某个属性的 getter/setter 方法,通过这些 API 可以使你不需要了解这个规则,这些 API 存放于包 java.beans 中。
一般的做法是通过类 Introspector 的 getBeanInfo方法 来获取某个对象的 BeanInfo 信息,然后通过 BeanInfo 来获取属性的描述器(PropertyDescriptor),通过这个属性描述器就可以获取某个属性对应的 getter/setter 方法,然后我们就可以通过反射机制来调用这些方法。
内省测试类:Introspector.java
Java代码
package com.royzhou.bean.
import java.beans.BeanInfo. import java.beans.Introspector. import java.beans.MethodDescriptor. import java.beans.PropertyDescriptor.
public class IntrospectorTest {
public static void main(String[] args) throws Exception {
SimpleBean sb = new SimpleBean("royzhou",new String[]{"football","backetball"}).
System.out.println(sb).
/**
* 使用Introspector.getBeanInfo(SimpleBean.class)将Bean的属性放入到BeanInfo中。
* 第二个参数为截止参数,表示截止到此类之前,不包括此类。
* 如果不设置的话,那么将会得到本类以及其所有父类的info。
* BeanInfo中包含了SimpleBean的信息百考试题-全国最大教育类网站(100test.com)
*/
BeanInfo beanInfo = Introspector.getBeanInfo(sb.getClass()).
//将每个属性的信息封装到一个PropertyDescriptor形成一个数组其中包括属性名字,读写方法,属性的类型等等 PropertyDescriptor[] propertys = beanInfo.getPropertyDescriptors().
for(PropertyDescriptor property : propertys) {
System.out.println("属性名:" property.getName()). System.out.println("类型:" property.getPropertyType()).
}
System.out.println().
System.out.println("列出SimpleBean的所有方法"). MethodDescriptor[] methods = beanInfo.getMethodDescriptors().
for(MethodDescriptor method : methods) {
System.out.println(method.getName()).
}
System.out.println().
/**
*重新设置属性值
*/
for(PropertyDescriptor property : propertys) {
if(property.getPropertyType().isArray()){