Интерфейс ClassLoaderRepository
public interface ClassLoaderRepository
Экземпляры этого интерфейса используются для хранения списка зарегистрированных ClassLoader в MBean Server. Они предоставляют необходимые методы для загрузки классов с помощью зарегистрированных ClassLoader.
Первый ClassLoader в ClassLoaderRepository всегда является собственным ClassLoader MBean Server.
Когда MBean регистрируется в MBean Server, если он является подклассом ClassLoader и если он не реализует интерфейс PrivateClassLoader, он добавляется в конец списка ClassLoaderRepository MBean Server. Если он впоследствии аннулируется из MBean Server, он удаляется из ClassLoaderRepository.
Порядок MBeans в ClassLoaderRepository важен. Для любых двух MBeans X и Y в ClassLoaderRepository, X должен предшествовать Y, если регистрация X была завершена до начала регистрации Y. Если X и Y были зарегистрированы одновременно, их порядок неопределен. Регистрация MBean соответствует вызову MBeanServer.registerMBean(java.lang.Object, javax.management.ObjectName) или одному из методов MBeanServer.createMBean.
- Since:
- 1.5
- See Also:
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, поиск продолжается со следующим ClassLoader. Если он бросает другую ошибку, ошибка передаётся из этого метода. Если список исчерпан, выбрасывается ClassNotFoundException.
- Parameters:
-
className- Имя класса для загрузки. - Returns:
- загруженный класс.
- Throws:
-
ClassNotFoundException- Указанный класс не был найден.
loadClassWithout
Class<?> loadClassWithout(ClassLoader exclude,
String className)
throws ClassNotFoundException
Загрузить заданное имя класса через список загрузчиков классов, исключая заданный. Каждый ClassLoader по очереди из ClassLoaderRepository, за исключением exclude, вызывается для загрузки класса через его метод ClassLoader.loadClass(String). Если он успешно возвращает объект Class, это результат этого метода. Если он бросает ClassNotFoundException, поиск продолжается со следующим ClassLoader. Если он бросает другую ошибку, ошибка передаётся из этого метода. Если список исчерпан, выбрасывается ClassNotFoundException.
Обратите внимание, что если ClassLoader в ClassLoaderRepository вызывает этот метод из своего метода loadClass, он подвержен тупику, если другой ClassLoader в ClassLoaderRepository делает то же самое одновременно. Рекомендуется использовать метод loadClassBefore(java.lang.ClassLoader, java.lang.String) для избежания риска тупика.
- Parameters:
-
className- Имя класса для загрузки. -
exclude- Загрузчик класса, который нужно исключить. Может быть null, в этом случае метод эквивалентенloadClass(className). - Returns:
- загруженный класс.
- Throws:
-
ClassNotFoundException- Указанный класс не был найден.
loadClassBefore
Class<?> loadClassBefore(ClassLoader stop,
String className)
throws ClassNotFoundException
Загрузить заданное имя класса через список загрузчиков классов, остановившись на заданном. Каждый ClassLoader по очереди из ClassLoaderRepository вызывается для загрузки класса через его метод ClassLoader.loadClass(String). Если он успешно возвращает объект Class, это результат этого метода. Если он бросает ClassNotFoundException, поиск продолжается со следующим ClassLoader. Если он бросает другую ошибку, ошибка передаётся из этого метода. Если поиск достигает stop или конца списка, выбрасывается ClassNotFoundException.
Как правило, этот метод вызывается из метода loadClass stop, чтобы проконсультироваться с загрузчиками, которые появляются до него в ClassLoaderRepository. Останавливая поиск, как только stop достигнут, предотвращается потенциальный тупик при одновременной загрузке классов.
- Parameters:
-
className- Имя класса для загрузки. -
stop- Загрузчик класса, на котором нужно остановиться. Может быть null, в этом случае метод эквивалентенloadClass(className). - Returns:
- загруженный класс.
- Throws:
-
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.
https://docs.oracle.com/en/java/javase/11/docs/api/java.management/javax/management/loading/ClassLoaderRepository.html