Module  java.desktop
软件包  java.beans

Class Introspector



  • public class Introspector
    extends Object
    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,我们使用低级反射来研究类的方法,并应用标准设计模式来识别属性访问器,事件源或公共方法。 然后,我们继续分析类的超类,并添加其中的信息(也可能在超类链上)。

    有关内省和设计模式的更多信息,请参阅JavaBeans™ specification

    从以下版本开始:
    1.1
    • 字段详细信息

      • USE_ALL_BEANINFO

        public static final int USE_ALL_BEANINFO
        用来表示使用所有beaninfo的标志。
        从以下版本开始:
        1.2
        另请参见:
        Constant Field Values
      • IGNORE_IMMEDIATE_BEANINFO

        public static final int IGNORE_IMMEDIATE_BEANINFO
        标记表示忽略直接beaninfo。
        从以下版本开始:
        1.2
        另请参见:
        Constant Field Values
      • IGNORE_ALL_BEANINFO

        public static final int IGNORE_ALL_BEANINFO
        标记以表示忽略所有beaninfo。
        从以下版本开始:
        1.2
        另请参见:
        Constant Field Values
    • 方法详细信息

      • getBeanInfo

        public static BeanInfo getBeanInfo​(Class<?> beanClass,
                                           int flags)
                                    throws IntrospectionException
        对Java bean进行内省,并了解其所有属性,公开方法和事件,并遵守一些控制标志。

        如果Java Bean的BeanInfo类之前已经基于相同的参数进行了Introspected,那么BeanInfo类将从BeanInfo缓存中检索。

        参数
        beanClass - 要分析的bean类。
        flags - 控制内省的标志。 如果flags == USE_ALL_BEANINFO,那么我们使用我们可以发现的所有BeanInfo类。 如果flags == IGNORE_IMMEDIATE_BEANINFO,那么我们忽略与指定的beanClass关联的任何BeanInfo。 如果flags == IGNORE_ALL_BEANINFO,那么我们忽略与指定的beanClass或其任何父类相关联的所有BeanInfo。
        结果
        描述目标bean的BeanInfo对象。
        异常
        IntrospectionException - 如果 IntrospectionException期间发生异常。
        从以下版本开始:
        1.2
      • getBeanInfo

        public static BeanInfo getBeanInfo​(Class<?> beanClass,
                                           Class<?> stopClass)
                                    throws IntrospectionException
        内省Java bean并了解其属性,暴露的方法,低于给定的“停止”点。

        如果Java Bean的BeanInfo类之前已经基于相同的参数进行了Introspected,那么BeanInfo类将从BeanInfo缓存中检索。

        参数
        beanClass - 要分析的bean类。
        stopClass - 停止分析的基础。 在分析中将忽略stopClass或其基类中的任何方法/属性/事件。
        结果
        bean的BeanInfo
        异常
        IntrospectionException - 如果 IntrospectionException期间发生异常。
      • getBeanInfo

        public static BeanInfo getBeanInfo​(Class<?> beanClass,
                                           Class<?> stopClass,
                                           int flags)
                                    throws IntrospectionException
        对Java Bean进行内省,并了解其所有属性,暴露的方法和事件,低于给定的stopClass点,受控于一些控件flags
        USE_ALL_BEANINFO
        可以使用任何可以发现的BeanInfo。
        IGNORE_IMMEDIATE_BEANINFO
        与指定的beanClass关联的任何BeanInfo将被忽略。
        IGNORE_ALL_BEANINFO
        与指定的beanClass或其任何父类相关联的任何BeanInfo将被忽略。
        在分析中将忽略stopClass或其父类中的任何方法/属性/事件。

        如果Java Bean的BeanInfo类先前已经基于相同的参数进行内省,那么BeanInfo类将从BeanInfo缓存中检索。

        参数
        beanClass - 要分析的bean类
        stopClass - 停止分析的父类
        flags - 控制内省的标志
        结果
        描述目标bean的BeanInfo对象
        异常
        IntrospectionException - 如果 IntrospectionException期间发生异常
        从以下版本开始:
        1.7
      • decapitalize

        public static String decapitalize​(String name)
        实用方法来取一个字符串并将其转换为正常的Java变量名称大小写。 这通常意味着将第一个字符从大写字母转换为小写,但是在(异常)特殊情况下,如果有多个字符,并且第一个和第二个字符都是大写字母,我们将其单独放置。

        因此,“FooBah”变为“fooBah”,“X”变成“x”,但是“URL”保持为“URL”。

        参数
        name - 要 name的字符串。
        结果
        字符串的decapitalized版本。
      • getBeanInfoSearchPath

        public static String[] getBeanInfoSearchPath​()
        获取将用于查找BeanInfo类的包名称列表。
        结果
        将搜索的包名称数组,以便找到BeanInfo类。 该数组的默认值是依赖于实现的; 例如,Sun实现最初设置为{“sun.beans.infos”}。
      • setBeanInfoSearchPath

        public static void setBeanInfoSearchPath​(String[] path)
        更改将用于查找BeanInfo类的包名称列表。 如果参数路径为空,则此方法的行为是未定义的。

        首先,如果有安全管理器,则调用其checkPropertiesAccess方法。 这可能会导致SecurityException。

        参数
        path - 包名称数组。
        异常
        SecurityException - 如果存在安全管理员,并且其 checkPropertiesAccess方法不允许设置系统属性。
        另请参见:
        SecurityManager.checkPropertiesAccess()
      • flushCaches

        public static void flushCaches​()
        冲洗所有Introspector的内部缓存。 通常不需要这种方法。 通常只需要先进的工具,就地更新现有的“Class”对象,并且需要使Introspector重新分析现有的Class对象。
        从以下版本开始:
        1.2
      • flushFromCaches

        public static void flushFromCaches​(Class<?> clz)
        刷新内部缓存信息给一个给定的类。 通常不需要这种方法。 通常只需要先进的工具,就地更新现有的“Class”对象,并且需要使Introspector重新分析现有的Class对象。 请注意,只有与目标Class对象关联的直接状态才会被刷新。 我们不刷新具有相同名称的其他Class对象的状态,即使它们的状态可能包含从目标Class对象间接获得的信息,我们也不会为任何相关的Class对象(如子类)刷新状态。
        参数
        clz - 要刷新的类对象。
        异常
        NullPointerException - 如果Class对象为空。
        从以下版本开始:
        1.2