全国咨询/投诉热线:400-618-4000

JAVA培训之Java内省机制

创建时间:2016年09月23日11时21分 浏览次数:

1.什么是内省

内省(Introspector)是Java语言对 Bean类属性、事件的一种缺省处理方法。例如类A中有属性name,那我们可以通过getName(),setName()来得到其值或者设置新的值。通过 getName/setName来访问name属性,这就是默认的规则。Java中提供了一套API用来访问某个属性的getter/setter方法, 通过这些API可以使你不需要了解这个规则,这些API存放于包java.beans中。
一般的做法是通过类Introspector来获取某个对象的BeanInfo信息,然后通过BeanInfo来获取属性的描述器(PropertyDescriptor),通过这个属性描述器就可以获取某个属性对应的getter/setter方法,然后我们就可以通过反射机制来调用这些方法。
其中,BeanInfo类是JavaBean的信息类,而BeanInfo类是通过Introspector类调用相关方法获得的,下面我们通过帮助文档来查看Introspector类,如图1-1所示:

图1-1 Introspector类
图1-1中,Introspector类调用静态的getBeanInfo(Class<?> clz)方法就可以获得一个BeanInfo类型的对象,其中该方法的参数是javaBean的Class对象。
现在在该帮助文档中查看BeanInfo类,如图1-2所示:

图1-2 BeanInfo类
图1-2中,BeanInfo类一共有八个方法,其中有个方法是getIcon(int iconKind ),在学习JavaBean时,我们说过JavaBean分两种,有一种是有用户界面的JavaBean,那么这个方法就是获取界面中JavaBean的图像对象。而用红色框标注的两个方法是我们重点学习的方法,如下:
  • MethodDescriptor[] getMethodDescriptors():
该方法返回的是描述受此JavaBean支持的扩展可见方法的MethodDescriptor数组
  • PropertyDescriptor[] getPropertyDescriptors():
该方法返回的是描述受此JavaBean支持的可编辑属性的PropertyDescriptor数组。
现在我们再来看看MethodDescriptor和PropertyDescriptor,首先了解MethodDescriptor类有哪些方法,如图1-3所示:

图1-3 MethodDescriptor类
图1-3中,调用getMethod()方法可以获得指定方法的Method类型对象,然后就可以利用反射执行指定的方法。
PropertyDescriptor类的方法如图1-4所示:

图1-4 PropertyDescriptor类
图1-4中,红色方框标注的两个方法比较常用,分别用来获得读属性的方法和写属性的方法,获得了读写方法的Method类型的对象,就可以利用反射实现操作和读取属性值的功能。
通过对以上几个类的分析,下面通过一张图来了解实现内省的步骤,如图1-5所示:

图1-5 内省图
当获得属性的读写方法对应的Method对象后,就可以利用反射实现对属性的操作。
本文版权归传智播客Java培训学院所有,欢迎转载,转载请注明作者出处。谢谢!
作者:传智播客Java培训学院
首发:http://www.itcast.cn/javaee