Класс-интерфейс ClassLoaderRepository
public interface ClassLoaderRepository
Экземпляры этого интерфейса используются для хранения списка зарегистрированных загрузчиков классов (ClassLoaders) в сервере MBean. Они предоставляют необходимые методы для загрузки классов с помощью зарегистрированных загрузчиков.
Первый загрузчик классов в списке ClassLoaderRepository всегда является собственным загрузчиком классов сервера MBean.
Когда MBean регистрируется в сервере MBean, если он является подклассом ClassLoader и не реализует интерфейс PrivateClassLoader, он добавляется в конец списка загрузчиков ClassLoaderRepository сервера MBean. Если он затем отменяет регистрацию в сервере MBean, он удаляется из списка ClassLoaderRepository.
Порядок MBeans в списке ClassLoaderRepository имеет значение. Для любых двух MBeans X и Y в списке ClassLoaderRepository, X должен предшествовать Y, если регистрация X была завершена до начала регистрации Y. Если X и Y были зарегистрированы одновременно, их порядок не определён. Регистрация MBean соответствует вызову MBeanServer.registerMBean(java.lang.Object, javax.management.ObjectName) или одному из методов MBeanServer.createMBean.
- С момента:
- 1.5
- См. также:
MBeanServerFactory
Методы
| Модификатор и тип | Метод и описание |
|---|---|
Class<?> |
loadClass(String className) Загрузить заданное имя класса через список загрузчиков классов. |
Class<?> |
loadClassBefore(ClassLoader stop,
String className) Загрузить заданное имя класса через список загрузчиков классов, остановившись на заданном. |
Class<?> |
loadClassWithout(ClassLoader exclude,
String className) Загрузить заданное имя класса через список загрузчиков классов, исключив заданный. |
Методы
loadClass
Class<?> loadClass(String className)
throws ClassNotFoundException Загрузить заданное имя класса через список загрузчиков классов. Каждый загрузчик классов (ClassLoader) по очереди из ClassLoaderRepository запрашивается для загрузки класса через его метод ClassLoader.loadClass(String). Если он успешно возвращает объект Class, то это и будет результатом этого метода. Если он вызывает исключение ClassNotFoundException, поиск продолжается со следующим загрузчиком классов. Если он вызывает другое исключение, исключение передаётся от этого метода. Если список загрузчиков исчерпан, выбрасывается исключение ClassNotFoundException.
- Параметры:
-
className- Имя класса, подлежащего загрузке. - Возвращает:
- загруженный класс.
- Исключения:
-
ClassNotFoundException- Указанный класс не найден.
loadClassWithout
Class<?> loadClassWithout(ClassLoader exclude,
String className)
throws ClassNotFoundException Загрузить заданное имя класса через список загрузчиков классов, исключая заданный. Каждый загрузчик классов (ClassLoader) по очереди из ClassLoaderRepository, кроме exclude, запрашивается для загрузки класса через его метод ClassLoader.loadClass(String). Если он успешно возвращает объект Class, то это и будет результатом этого метода. Если он вызывает исключение ClassNotFoundException, поиск продолжается со следующим загрузчиком классов. Если он вызывает другое исключение, исключение передаётся от этого метода. Если список загрузчиков исчерпан, выбрасывается исключение ClassNotFoundException.
Обратите внимание, что если загрузчик классов (ClassLoader) в ClassLoaderRepository вызывает этот метод из своего метода loadClass, он подвергает себя риску тупиковой ситуации (deadlock), если другой загрузчик классов (ClassLoader) в ClassLoaderRepository делает то же самое в то же время. Рекомендуется использовать метод loadClassBefore(java.lang.ClassLoader, java.lang.String) для избежания риска тупиковой ситуации.
- Параметры:
-
className- Имя класса, подлежащего загрузке. -
exclude- Загрузчик классов (ClassLoader), который следует исключить. Может быть null, в этом случае этот метод эквивалентенloadClass(className). - Возвращает:
- загруженный класс.
- Исключения:
-
ClassNotFoundException- Указанный класс не найден.
loadClassBefore
Class<?> loadClassBefore(ClassLoader stop,
String className)
throws ClassNotFoundException Загрузить заданное имя класса через список загрузчиков классов, остановившись на заданном. Каждый загрузчик классов (ClassLoader) по очереди из ClassLoaderRepository запрашивается для загрузки класса через его метод ClassLoader.loadClass(String). Если он успешно возвращает объект Class, то это и будет результатом этого метода. Если он вызывает исключение ClassNotFoundException, поиск продолжается со следующим загрузчиком классов. Если поиск достигает stop или конца списка, выбрасывается исключение ClassNotFoundException.
Обычно этот метод вызывается из метода loadClass загрузчика классов stop, чтобы проконсультироваться с загрузчиками, которые предшествуют ему в списке ClassLoaderRepository. Остановкой поиска как только будет достигнут stop, предотвращается потенциальная тупиковая ситуация при одновременной загрузке классов.
- Параметры:
-
className- Имя класса, подлежащего загрузке. -
stop- Загрузчик классов (ClassLoader), на котором следует остановиться. Может быть null, в этом случае этот метод эквивалентенloadClass(className). - Возвращает:
- загруженный класс.
- Исключения:
-
ClassNotFoundException- Указанный класс не найден.
© 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.