java.lang.Object | +----java.beans.Introspector
Introspector 类提供工具获得某个目标 Java Bean 支持的特性、事件和方法的一个标准方式。
对于该三类信息中的每类,Introspector 将通过寻找显式或隐式信息来分别分析 bean 的类和父类,并使用该信息建立一个综合描述目标 bean 的 BeanInfo 对象。
对于每个类“Foo”, 当查询信息时若存在一个相应的“ FooBeanInfo ”类来提供非空值,则显式信息是可用的。通过取得目标 bean 类的完全包合格名并追加“ BeanInfo ”形成一个新类名的方式来查找 Beaninfo 类。若失败,则获取该名的最后的类名组件并在 BeanInfo 包搜索路径所指定的每个包中查找该类。
因此对于象“sun.xyz.OurButton”的类,首先查看名为“ sun.xyz.OurButtonBeanInfo”的 BeanInfo 类,若失败则在 BeanInfo 搜索路径中的每个包里查询 OurButtonBeanInfo 类。缺省搜索路径即意味着查找“sun.beans.infos.OurButtonBeanInfo”。
若一个类提供关于自身的显式 BeanInfo ,则将其添加到分析任何导出类所获得的 BeanInfo 信息中,但该显式信息将被视为当前类及其基类的确切信息且不能处理任何进一步的父类链。
若不能在某个类上找到显式 BeanInfo , 则使用低级反映来学习类方法并应用标准设计模式来标识特性存取器、事件源或公有方法。然后着手分析该类的父类并添加从它来的信息 (可能在上级父类链上)。
public static BeanInfo getBeanInfo(Class beanClass) throws IntrospectionException
public static BeanInfo getBeanInfo(Class beanClass,
Class stopClass) throws IntrospectionException
public static String decapitalize(String name)
因此“FooBah”变为“fooBah”,“X”变为“x”, 但“URL”仍是“URL”。
public static String[] getBeanInfoSearchPath()
初始设置为 {"sun.beans.infos"}。
public static void setBeanInfoSearchPath(String path[])