黑马程序员-javabean

来源:互联网 发布:java http user agent 编辑:程序博客网 时间:2024/04/29 05:43

   ----------- android培训、java培训、java学习型技术博客、期待与您交流! ------------


1。java.beans

类 PropertyDescriptor

PropertyDescriptor 描述 Java Bean 通过一对存储器方法导出的一个属性。


public PropertyDescriptor(String propertyName,
                          Class<?> beanClass)
                   throws IntrospectionException通过调用 getFoo 和 setFoo 存取方法,为符合标准 Java 约定的属性构造一个 PropertyDescriptor。因此如果参数名为 "fred",则假定 writer 方法为 "setFred",reader 方法为 "getFred"(对于 boolean 属性则为 "isFred")。注意,属性名应该以小写字母开头,而方法名称中的首写字母将是大写的。

参数:
propertyName - 属性的编程名称。
beanClass - 目标 bean 的 Class 对象。例如 sun.beans.OurButton.class。
抛出:
IntrospectionException - 如果在内省期间发生异常。

--------------------------------------------------------------------------------
 Method getReadMethod()
          获得应该用于读取属性值的方法。
 Method getWriteMethod()
          获得应该用于写入属性值的方法。
 Object invoke(Object obj, Object... args)
          对带有指定参数的指定对象调用由此 Method 对象表示的底层方法。、、
invoke
public Object invoke(Object obj,
                     Object... args)
              throws IllegalAccessException,
                     IllegalArgumentException,
                     InvocationTargetException对带有指定参数的指定对象调用由此 Method 对象表示的底层方法。个别参数被自动解包,以便与基本形参相匹配,基本参数和引用参数都随需服从方法调用转换。
如果底层方法是静态的,那么可以忽略指定的 obj 参数。该参数可以为 null。

如果底层方法所需的形参数为 0,则所提供的 args 数组长度可以为 0 或 null。

如果底层方法是实例方法,则使用动态方法查找来调用它,这一点记录在 Java Language Specification, Second Edition 的第 15.12.4.4 节中;在发生基于目标对象的运行时类型的重写时更应该这样做。

如果底层方法是静态的,并且尚未初始化声明此方法的类,则会将其初始化。

如果方法正常完成,则将该方法返回的值返回给调用者;如果该值为基本类型,则首先适当地将其包装在对象中。但是,如果该值的类型为一组基本类型,则数组元素不 被包装在对象中;换句话说,将返回基本类型的数组。如果底层方法返回类型为 void,则该调用返回 null。


参数:
obj - 从中调用底层方法的对象
args - 用于方法调用的参数
返回:
使用参数 args 在 obj 上指派该对象所表示方法的结果

用属性描述类获取一个类的某个属性描述,然后用属性描述类的获取方法获取一个方法类,此方法类的IVOKE方法得到符合规则的类的指定属性。



2.
对javabean的复杂内省操作

Introspector 类为通过工具学习有关受目标 Java Bean 支持的属性、事件和方法的知识提供了一个标准方法。
第一步:用Introspector的以下方法了解这个类的所有属性,获得一个BeanInfo
 static BeanInfo getBeanInfo(Class<?> beanClass)
          在 Java Bean 上进行内省,了解其所有属性、公开的方法和事件。、
public interface BeanInfo
希望提供有关其 bean 的显式信息的 bean 实现者可以提供某个 BeanInfo 类,该类实现此 BeanInfo 接口并提供有关其 bean 的方法、属性、事件等显式信息。
第2步:
 通过beaninfo的getPropertyDescriptors() 得到一个属性数组
PropertyDescriptor[]
 getPropertyDescriptors()
          获得 beans PropertyDescriptor。
第3步
 用高级for循环得到这个属性数组的各个属性,用属性名和传入的参数属性名比较,一样则用该属性描述类获得读或写的方法实例。然后用该实例的IVOKE方法获得指定信息

 Class<?> getClass()
          返回此 Object 的运行时类。

   ----------- android培训、java培训、java学习型技术博客、期待与您交流! ------------

                                                    详细请查看:http://edu.csdn.net/heima