JAVA培训之Java内省机制

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所示:
JAVA培训之Java内省机制
图1-1 Introspector类
图1-1中,Introspector类调用静态的getBeanInfo(Class<?> clz)方法就可以获得一个BeanInfo类型的对象,其中该方法的参数是javaBean的Class对象。
现在在该帮助文档中查看BeanInfo类,如图1-2所示:
JAVA培训之Java内省机制
图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所示:
JAVA培训之Java内省机制
图1-3 MethodDescriptor类
图1-3中,调用getMethod()方法可以获得指定方法的Method类型对象,然后就可以利用反射执行指定的方法。
PropertyDescriptor类的方法如图1-4所示:
JAVA培训之Java内省机制
图1-4 PropertyDescriptor类
图1-4中,红色方框标注的两个方法比较常用,分别用来获得读属性的方法和写属性的方法,获得了读写方法的Method类型的对象,就可以利用反射实现操作和读取属性值的功能。
通过对以上几个类的分析,下面通过一张图来了解实现内省的步骤,如图1-5所示:
JAVA培训之Java内省机制
图1-5 内省图
当获得属性的读写方法对应的Method对象后,就可以利用反射实现对属性的操作。




原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/java/253204.html

(0)
上一篇 2022年5月7日 06:58
下一篇 2022年5月7日 07:02

相关推荐

发表回复

登录后才能评论