Класс Introspector
- java.lang.Object
-
- java.beans.Introspector
public class Introspector extends Object
Класс Introspector предоставляет стандартный способ для инструментов узнать о свойствах, событиях и методах, поддерживаемых целевым Java Bean.
Для каждого из этих трёх типов информации Introspector отдельно проанализирует класс бина и его суперклассы, в поисках явных или неявных данных, и использует эту информацию для построения объекта BeanInfo, который подробно описывает целевой бин.
Для каждого класса «Foo», явная информация может быть доступна, если существует соответствующий класс «FooBeanInfo», который предоставляет ненулевое значение при запросе информации. Сначала мы ищем класс BeanInfo, взяв полное имя пакета целевого класса бина и добавив «BeanInfo» для образования нового имени класса. Если это не удалось, тогда мы берём конечный компонент имени класса и ищем этот класс в каждой из папок, указанных в пути поиска пакета BeanInfo.
Таким образом, для класса такого как «sun.xyz.OurButton», мы бы сначала искали класс BeanInfo с именем «sun.xyz.OurButtonBeanInfo», и если это не удалось, мы бы искали в каждом пакете в пути поиска BeanInfo класс OurButtonBeanInfo. В случае стандартного пути поиска, это означало бы поиск «sun.beans.infos.OurButtonBeanInfo».
Если класс предоставляет явную информацию BeanInfo о себе, то мы добавляем её к информации BeanInfo, полученной от анализа всех производных классов, но мы считаем явную информацию определённой для текущего класса и его базовых классов, и не продолжаем поиск в цепочке суперклассов.
Если мы не находим явной информации BeanInfo для класса, мы используем низкоуровневый рефлексию для изучения методов класса и применяем стандартные шаблоны проектирования для определения аксессоров свойств, источников событий или публичных методов. Затем мы переходим к анализу суперкласса класса и добавляем информацию из него (и, возможно, до самой вершины цепочки суперклассов).
Для получения дополнительной информации об интроспекции и шаблонах проектирования, пожалуйста, обратитесь к спецификации JavaBeans™.
- С момента:
- 1.1
Поля
| Модификатор и тип | Поле | Описание |
|---|---|---|
static int | IGNORE_ALL_BEANINFO | Флаг, указывающий на игнорирование всей информации beaninfo. |
static int | IGNORE_IMMEDIATE_BEANINFO | Флаг, указывающий на игнорирование непосредственной информации beaninfo. |
static int | USE_ALL_BEANINFO | Флаг, указывающий на использование всей информации beaninfo. |
Методы
| Модификатор и тип | Метод | Описание |
|---|---|---|
static String | decapitalize(String name) | Утилитарный метод, преобразующий строку в обычную капитализацию переменной Java. |
static void | flushCaches() | Очистка всех внутренних кэшей Introspector. |
static void | flushFromCaches(Class<?> clz) | Очистка внутренней кэшированной информации Introspector для данного класса. |
static BeanInfo | getBeanInfo(Class<?> beanClass) | Интроспекция Java Bean для изучения всех его свойств, доступных методов и событий. |
static BeanInfo | getBeanInfo(Class<?> beanClass,
int flags) | Интроспекция Java Bean для изучения всех его свойств, доступных методов и событий, с учётом некоторых флагов управления. |
static BeanInfo | getBeanInfo(Class<?> beanClass,
Class<?> stopClass) | Интроспекция Java Bean для изучения всех его свойств и доступных методов, ниже заданной «стоп» точки. |
static BeanInfo | getBeanInfo(Class<?> beanClass,
Class<?> stopClass,
int flags) | Интроспекция Java Bean для изучения всех его свойств, доступных методов и событий, ниже заданной |
static String[] | getBeanInfoSearchPath() | Получение списка имён пакетов, используемых для поиска классов BeanInfo. |
static void | setBeanInfoSearchPath(String[] path) | Изменение списка имён пакетов, используемых для поиска классов BeanInfo. |
Методы, объявленные в классе java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait Поля
USE_ALL_BEANINFO
public static final int USE_ALL_BEANINFO
Флаг, указывающий на использование всех beaninfo.
- Since:
- 1.2
- См. также:
- Значения константных полей
IGNORE_IMMEDIATE_BEANINFO
public static final int IGNORE_IMMEDIATE_BEANINFO
Флаг, указывающий на игнорирование непосредственного beaninfo.
- Since:
- 1.2
- См. также:
- Значения константных полей
IGNORE_ALL_BEANINFO
public static final int IGNORE_ALL_BEANINFO
Флаг, указывающий на игнорирование всего beaninfo.
- Since:
- 1.2
- См. также:
- Значения константных полей
Методы
getBeanInfo
public static BeanInfo getBeanInfo(Class<?> beanClass)
throws IntrospectionException Провести интроспекцию Java-компонента и узнать о всех его свойствах, доступных методах и событиях.
Если класс BeanInfo для Java-компонента был ранее проинтроспектирован, то класс BeanInfo извлекается из кэша BeanInfo.
- Параметры:
-
beanClass- Класс компонента, подлежащий анализу. - Возвращает:
- Объект BeanInfo, описывающий целевой компонент.
- Исключение:
-
IntrospectionException- если во время интроспекции произошла ошибка. - См. также:
-
flushCaches(),flushFromCaches(java.lang.Class<?>)
getBeanInfo
public static BeanInfo getBeanInfo(Class<?> beanClass,
int flags)
throws IntrospectionException Провести интроспекцию Java-компонента и узнать о всех его свойствах, доступных методах и событиях, с учетом некоторых флагов управления.
Если класс BeanInfo для Java-компонента был ранее проинтроспектирован на основе тех же аргументов, то класс BeanInfo извлекается из кэша BeanInfo.
- Параметры:
-
beanClass- Класс компонента, подлежащий анализу. -
flags- Флаги управления интроспекцией. Если flags == USE_ALL_BEANINFO, то используются все обнаруженные классы BeanInfo. Если flags == IGNORE_IMMEDIATE_BEANINFO, то игнорируется любой BeanInfo, связанный со указанным beanClass. Если flags == IGNORE_ALL_BEANINFO, то игнорируется весь BeanInfo, связанный с указанным beanClass или любым его родительским классом. - Возвращает:
- Объект BeanInfo, описывающий целевой компонент.
- Исключение:
-
IntrospectionException- если во время интроспекции произошла ошибка. - Since:
- 1.2
getBeanInfo
public static BeanInfo getBeanInfo(Class<?> beanClass,
Class<?> stopClass)
throws IntrospectionException Провести интроспекцию Java-компонента и узнать о всех его свойствах, доступных методах и событиях, до заданной точки остановки.
Если класс BeanInfo для Java-компонента был ранее проинтроспектирован на основе тех же аргументов, то класс BeanInfo извлекается из кэша BeanInfo.
- Параметры:
-
beanClass- Класс компонента, подлежащий анализу. -
stopClass- Базовый класс, по которому останавливается анализ. Любые методы/свойства/события в stopClass или его базовых классах будут проигнорированы в процессе анализа. - Возвращает:
- BeanInfo для компонента
- Исключение:
-
IntrospectionException- если во время интроспекции произошла ошибка.
getBeanInfo
public static BeanInfo getBeanInfo(Class<?> beanClass,
Class<?> stopClass,
int flags)
throws IntrospectionException Провести интроспекцию Java-компонента и узнать о всех его свойствах, доступных методах и событиях, до заданной stopClass точки, с учетом некоторых флагов управления flags.
- USE_ALL_BEANINFO
- Будут использованы все доступные BeanInfo.
- IGNORE_IMMEDIATE_BEANINFO
- Будет проигнорирован любой BeanInfo, связанный с указанным
beanClass. - IGNORE_ALL_BEANINFO
- Будет проигнорирован любой BeanInfo, связанный с указанным
beanClassили любым его родительским классом.
stopClass или его родительских классах будут проигнорированы в процессе анализа.
Если класс BeanInfo для Java-компонента был ранее проинтроспектирован на основе тех же аргументов, то класс BeanInfo извлекается из кэша BeanInfo.
- Параметры:
-
beanClass- класс компонента, подлежащий анализу -
stopClass- родительский класс, по которому останавливается анализ -
flags- флаги управления интроспекцией - Возвращает:
- объект BeanInfo, описывающий целевой компонент
- Исключение:
-
IntrospectionException- если во время интроспекции произошла ошибка - Since:
- 1.7
decapitalize
public static String decapitalize(String name)
Вспомогательный метод для преобразования строки в обычное именование переменных Java. Обычно это означает преобразование первого символа из верхнего регистра в нижний, но в (необычном) специальном случае, когда есть более одного символа и первый и второй символы - заглавные буквы, мы оставляем их без изменения.
Таким образом, "FooBah" преобразуется в "fooBah", а "X" в "x", но "URL" остается как "URL".
- Параметры:
-
name- Строка, подлежащая преобразованию. - Возвращает:
- Преобразованная строка.
getBeanInfoSearchPath
public static String[] getBeanInfoSearchPath()
Получает список имен пакетов, которые будут использоваться для поиска классов BeanInfo.
- Возвращает:
- Массив имен пакетов, которые будут просматриваться в порядке поиска классов BeanInfo. Значение по умолчанию для этого массива зависит от реализации; например, в реализации Sun он изначально устанавливается в {"sun.beans.infos"}.
setBeanInfoSearchPath
public static void setBeanInfoSearchPath(String[] path)
Изменить список имен пакетов, которые будут использоваться для поиска классов BeanInfo. Поведение этого метода не определено, если параметр path равен null.
Во-первых, если существует менеджер безопасности, вызывается его метод checkPropertiesAccess. Это может привести к SecurityException.
- Параметры:
-
path- Массив имен пакетов. - Исключение:
-
SecurityException- если существует менеджер безопасности, и его методcheckPropertiesAccessне разрешает установку системных свойств. - См. также:
SecurityManager.checkPropertiesAccess()
flushCaches
public static void flushCaches()
Очистить все внутренние кэши Introspector. Обычно этот метод не требуется. Он обычно нужен только расширенным инструментам, которые обновляют существующие объекты "Class" на месте и нуждаются в том, чтобы Introspector повторно проанализировал существующие объекты Class.
- Since:
- 1.2
flushFromCaches
public static void flushFromCaches(Class<?> clz)
Очистить внутреннюю кэшированную информацию Introspector для заданного класса. Обычно этот метод не требуется. Он обычно нужен только расширенным инструментам, которые обновляют существующие объекты "Class" на месте и нуждаются в том, чтобы Introspector повторно проанализировал существующий объект Class. Обратите внимание, что очищается только непосредственное состояние, связанное с целевым объектом Class. Мы не очищаем состояние для других объектов Class с тем же именем, ни для связанных объектов Class (таких как подклассы), даже если их состояние может содержать информацию, косвенно полученную от целевого объекта Class.
- Параметры:
-
clz- Объект класса, подлежащий очистке. - Исключение:
-
NullPointerException- Если объект Class равен null. - Since:
- 1.2
© 1993, 2020, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/11/docs/api/java.desktop/java/beans/Introspector.html