Spec-Zone .ru
спецификации, руководства, описания, API
|
public class RMIClassLoader extends Object
RMIClassLoader
включает статические методы, чтобы поддерживать динамический класс, загружающийся с RMI. Включенный методы для того, чтобы загрузить классы из сетевого расположения (один или более URL) и получить расположение, из которого существующий класс должен быть загружен удаленными сторонами. Эти методы используются временем выполнения RMI, упорядочивая и неупорядочивая классы, содержавшиеся в параметрах и возвращаемых значениях удаленных вызовов метода, и они также могут быть вызваны непосредственно приложениями, чтобы подражать динамическому поведению загрузки класса RMI. Реализация следующих статических методов
loadClass(URL,String)
loadClass(String,String)
loadClass(String,String,ClassLoader)
loadProxyClass(String,String[],ClassLoader)
getClassLoader(String)
getClassAnnotation(Class)
RMIClassLoaderSpi
, интерфейс поставщика услуг для тех методов. Когда один из методов вызывается, его поведение должно делегировать к соответствующему методу на экземпляре поставщика услуг. Детали того, как каждый метод делегаты в экземпляре провайдера описывается в документации для каждого определенного метода. Экземпляр поставщика услуг выбирается следующим образом:
java.rmi.server.RMIClassLoaderSpi
определяется, затем если его значение равняется строке "default"
, экземпляр провайдера будет значением, возвращенным вызовом getDefaultProviderInstance()
метод, и для любого другого значения, если класс, названный со значением свойства, может быть загружен системным загрузчиком класса (см. ClassLoader.getSystemClassLoader()
) и тот класс присваиваем RMIClassLoaderSpi
и имеет общедоступного конструктора без параметров, тогда тот конструктор будет вызван, чтобы создать экземпляр провайдера. Если свойство определяется, но любые другие из тех условий не являются истиной, то неуказанное Error
будет брошен, чтобы кодировать, который пытается использовать RMIClassLoader
, указание на отказ получить экземпляр провайдера. META-INF/services/java.rmi.server.RMIClassLoaderSpi
видимо к системному загрузчику класса, тогда содержание того ресурса интерпретируется как конфигурационный файл провайдера, и имя первого класса, определенное в том файле, используется в качестве имени класса провайдера. Если класс с тем именем может быть загружен системным загрузчиком класса, и тот класс присваиваем RMIClassLoaderSpi
и имеет общедоступного конструктора без параметров, тогда тот конструктор будет вызван, чтобы создать экземпляр провайдера. Если ресурс находится, но провайдер нельзя инстанцировать как описано, то неуказанное Error
будет брошен, чтобы кодировать, который пытается использовать RMIClassLoader
, указание на отказ получить экземпляр провайдера. getDefaultProviderInstance()
метод. RMIClassLoaderSpi
Модификатор и Тип | Метод и Описание |
---|---|
static String |
getClassAnnotation(Class<?> cl)
Возвращает строку аннотации (представляющий расположение для определения класса), который RMI будет использовать, чтобы аннотировать дескриптор класса, упорядочивая объекты данного класса.
|
static ClassLoader |
getClassLoader(String codebase)
Возвращает загрузчик класса, который загружает классы из данной кодовой базы путь URL.
|
static RMIClassLoaderSpi |
getDefaultProviderInstance()
Возвращает канонический экземпляр провайдера по умолчанию для интерфейса поставщика услуг
RMIClassLoaderSpi . |
static Object |
getSecurityContext(ClassLoader loader)
Осуждаемый.
никакая замена. С Java 2 платформы v1.2, RMI больше не использует этот метод, чтобы получить контекст защиты загрузчика класса.
|
static Class<?> |
loadClass(String name)
Осуждаемый.
замененный
loadClass(String,String) метод |
static Class<?> |
loadClass(String codebase, String name)
Загружает класс из кодовой базы путь URL.
|
static Class<?> |
loadClass(String codebase, String name, ClassLoader defaultLoader)
Загружает класс из кодовой базы путь URL, дополнительно используя предоставленный загрузчик.
|
static Class<?> |
loadClass(URL codebase, String name)
Загружает класс из кодовой базы URL.
|
static Class<?> |
loadProxyClass(String codebase, String[] interfaces, ClassLoader defaultLoader)
Загружает динамический прокси-класс (см.
Proxy ) это реализует ряд интерфейсов с именами от кодовой базы путь URL. |
@Deprecated public static Class<?> loadClass(String name) throws MalformedURLException, ClassNotFoundException
loadClass(String,String)
методname
. Этот метод делегирует к loadClass(String,String)
, передача null
как первый параметр и name
как второй параметр.
name
- имя класса загрузкиClass
объект, представляющий загруженный классMalformedURLException
- если специфичный для провайдера URL, используемый, чтобы загрузить классы, недопустимClassNotFoundException
- если определение для класса не могло бы быть найдено в расположении кодовой базыloadClass(String,String)
public static Class<?> loadClass(URL codebase, String name) throws MalformedURLException, ClassNotFoundException
codebase
null
, тогда этот метод будет вести себя то же самое как loadClass(String,String)
с a null
codebase
и данное имя класса. Этот метод делегирует к RMIClassLoaderSpi.loadClass(String,String,ClassLoader)
метод экземпляра провайдера, передавая результат вызова URL.toString()
на данном URL (или null
если codebase
нуль) как первый параметр, name
как второй параметр, и null
как третий параметр.
codebase
- URL, чтобы загрузить класс из, или null
name
- имя класса загрузкиClass
объект, представляющий загруженный классMalformedURLException
- если codebase
null
и специфичный для провайдера URL, используемый, чтобы загрузить классы, недопустимClassNotFoundException
- если определение для класса не могло бы быть найдено в указанном URLpublic static Class<?> loadClass(String codebase, String name) throws MalformedURLException, ClassNotFoundException
Этот метод делегирует к RMIClassLoaderSpi.loadClass(String,String,ClassLoader)
метод экземпляра провайдера, передавая codebase
как первый параметр, name
как второй параметр, и null
как третий параметр.
codebase
- список URL (разделенный пробелами), чтобы загрузить класс из, или null
name
- имя класса загрузкиClass
объект, представляющий загруженный классMalformedURLException
- если codebase
не -null
и содержит недопустимый URL, или если codebase
null
и специфичный для провайдера URL, используемый, чтобы загрузить классы, недопустимClassNotFoundException
- если определение для класса не могло бы быть найдено в указанном расположенииpublic static Class<?> loadClass(String codebase, String name, ClassLoader defaultLoader) throws MalformedURLException, ClassNotFoundException
defaultLoader
, если определено, прежде, чем попытаться разрешить класс от кодовой базы путь URL. Этот метод делегирует к RMIClassLoaderSpi.loadClass(String,String,ClassLoader)
метод экземпляра провайдера, передавая codebase
как первый параметр, name
как второй параметр, и defaultLoader
как третий параметр.
codebase
- список URL (разделенный пробелами), чтобы загрузить класс из, или null
name
- имя класса загрузкиdefaultLoader
- дополнительный контекстный загрузчик класса, чтобы использовать, или null
Class
объект, представляющий загруженный классMalformedURLException
- если codebase
не -null
и содержит недопустимый URL, или если codebase
null
и специфичный для провайдера URL, используемый, чтобы загрузить классы, недопустимClassNotFoundException
- если определение для класса не могло бы быть найдено в указанном расположенииpublic static Class<?> loadProxyClass(String codebase, String[] interfaces, ClassLoader defaultLoader) throws ClassNotFoundException, MalformedURLException
Proxy
) это реализует ряд интерфейсов с именами от кодовой базы путь URL. Интерфейсы будут разрешены подобные классам, загруженным через loadClass(String,String)
метод используя данный codebase
.
Этот метод делегирует к RMIClassLoaderSpi.loadProxyClass(String,String[],ClassLoader)
метод экземпляра провайдера, передавая codebase
как первый параметр, interfaces
как второй параметр, и defaultLoader
как третий параметр.
codebase
- список URL (разделенных пробелом), чтобы загрузить классы из, или null
interfaces
- имена интерфейсов для прокси-класса, чтобы реализоватьdefaultLoader
- дополнительный контекстный загрузчик класса, чтобы использовать, или null
MalformedURLException
- если codebase
не -null
и содержит недопустимый URL, или если codebase
null
и специфичный для провайдера URL, используемый, чтобы загрузить классы, недопустимClassNotFoundException
- если определение для одного из именованных интерфейсов не могло бы быть найдено в указанном расположении, или если создание динамического отказавшего прокси-класса (такой, как будто Proxy.getProxyClass(ClassLoader,Class[])
бросил бы IllegalArgumentException
для данного интерфейсного списка)public static ClassLoader getClassLoader(String codebase) throws MalformedURLException, SecurityException
Возвращенный загрузчик класса является загрузчиком класса что loadClass(String,String)
метод использовал бы, чтобы загрузить классы для того же самого codebase
параметр.
Этот метод делегирует к RMIClassLoaderSpi.getClassLoader(String)
метод экземпляра провайдера, передавая codebase
как параметр.
Если есть кормушка безопасности, checkPermission
метод будет вызван с a RuntimePermission("getClassLoader")
разрешение; это могло привести к a SecurityException
. Реализация провайдера этого метода может также выполнить дальнейшие проверки безопасности, чтобы проверить, что у контекста вызова есть разрешение, чтобы соединить со всеми URL в кодовой базе путь URL.
codebase
- список URL (разделенных пробелом), от которого возвращенный загрузчик класса загрузит классы из, или null
MalformedURLException
- если codebase
не -null
и содержит недопустимый URL, или если codebase
null
и специфичный для провайдера URL, используемый, чтобы идентифицировать загрузчик класса, недопустимSecurityException
- если есть менеджер безопасности и вызов checkPermission
сбои метода, или если у вызывающей стороны нет разрешения, чтобы соединить со всеми URL в кодовой базе путь URLpublic static String getClassAnnotation(Class<?> cl)
Этот метод делегирует к RMIClassLoaderSpi.getClassAnnotation(Class)
метод экземпляра провайдера, передавая cl
как параметр.
cl
- класс, чтобы получить аннотацию дляnull
NullPointerException
- если cl
null
public static RMIClassLoaderSpi getDefaultProviderInstance()
RMIClassLoaderSpi
с . Если системное свойство java.rmi.server.RMIClassLoaderSpi
не определяется, тогда RMIClassLoader
статические методы loadClass(URL,String)
loadClass(String,String)
loadClass(String,String,ClassLoader)
loadProxyClass(String,String[],ClassLoader)
getClassLoader(String)
getClassAnnotation(Class)
Если есть менеджер безопасности, checkPermission
метод будет вызван с a RuntimePermission("setFactory")
разрешение; это могло привести к a SecurityException
.
Реализации экземпляра поставщика услуг по умолчанию RMIClassLoaderSpi
следующим образом:
getClassAnnotation
метод возвращает aString
представление кодовой базы путь URL, который удаленная сторона должна использовать, чтобы загрузить определение для указанного класса. Формат возвращенной строки является путем URL, разделенных пробелами. Возвращенная строка кодовой базы зависит от загрузчика класса определения указанного класса:
- Если загрузчик класса является системным загрузчиком класса (см.
ClassLoader.getSystemClassLoader()
), родитель системного загрузчика класса, такого как загрузчик, используемый для установленных расширений, или загрузчика класса начальной загрузки (который может быть представленnull
), тогда значениеjava.rmi.server.codebase
свойство (или возможно более раннее кэшируемое значение) возвращается, илиnull
возвращается, если то свойство не устанавливается.- Иначе, если загрузчик класса является экземпляром
URLClassLoader
, тогда возвращенная строка является разделенным пробелом списком внешних форм URL, возвращенных, вызываяgetURLs
методы загрузчика. ЕслиURLClassLoader
создавался этим провайдером, чтобы обслужить вызовloadClass
илиloadProxyClass
методы, тогда никакие полномочия не обязаны получать связанную строку кодовой базы. Если это - произвольный другойURLClassLoader
экземпляр, затем если есть менеджер безопасности,checkPermission
метод будет вызван однажды для каждого URL, возвращенногоgetURLs
метод, с разрешением, возвращенным, вызываяopenConnection().getPermission()
на каждом URL; если какой-либо из тех вызовов бросает aSecurityException
илиIOException
, тогда значениеjava.rmi.server.codebase
свойство (или возможно более раннее кэшируемое значение) возвращается, илиnull
возвращается, если то свойство не устанавливается.- Наконец, если загрузчик класса не является экземпляром
URLClassLoader
, тогда значениеjava.rmi.server.codebase
свойство (или возможно более раннее кэшируемое значение) возвращается, илиnull
возвращается, если то свойство не устанавливается.Для реализаций методов, описанных ниже, который все берут a
String
параметр называютcodebase
это - разделенный пробелом список URL, у каждого вызова есть связанный загрузчик кодовой базы, который идентифицируется, используяcodebase
параметр в соединении с загрузчиком класса контекста текущего потока (см.Thread.getContextClassLoader()
). Когда есть менеджер безопасности, этот провайдер поддерживает внутреннюю таблицу экземпляров загрузчика класса (которые являются, по крайней мере, экземплярамиURLClassLoader
) включенный парой их загрузчика родительского класса и их кодовой базы путь URL (упорядоченный список URL). Еслиcodebase
параметрnull
, кодовая база путь URL является значением системного свойстваjava.rmi.server.codebase
или возможно более раннее кэшируемое значение. Для данной кодовой базы путь URL, который передают какcodebase
параметр вызову одного из ниже методов в данном контексте, загрузчик кодовой базы является загрузчиком в таблице с указанной кодовой базой путь URL и загрузчик класса контекста текущего потока как его родитель. Если никакой такой загрузчик не существует, то каждый создается и добавляется к таблице. Таблица не поддерживает сильные ссылки на свои содержавшие загрузчики, чтобы позволить им и их определенным классам быть собранными "мусор" если не иначе достижимые. Чтобы препятствовать тому, чтобы произвольный недоверяемый код был неявно загружен в виртуальную машину без менеджера безопасности, если нет никакого набора менеджера безопасности, загрузчик кодовой базы является только загрузчиком класса контекста текущего потока (предоставленная кодовая база, путь URL игнорируется, таким образом, удаленная загрузка класса отключается).
getClassLoader
метод возвращает загрузчик кодовой базы для указанной кодовой базы путь URL. Если есть менеджер безопасности, то, если у контекста вызова нет разрешения, чтобы соединить со всеми URL в кодовой базе путь URL, aSecurityException
будет брошен.
loadClass
метод пытается загрузить класс указанным именем следующим образом:ЕслиdefaultLoader
параметр не -null
, это сначала пытается загрузить класс указаннымname
использованиеdefaultLoader
, такой как, оцениваяClass.forName(name, false, defaultLoader)Если класс успешно загружается изdefaultLoader
, тот класс возвращается. Если исключение кромеClassNotFoundException
бросается, то исключение выдается к вызывающей стороне.Затем,
loadClass
метод пытается загрузить класс указаннымname
использование загрузчика кодовой базы для указанной кодовой базы путь URL. Если есть менеджер безопасности, то у контекста вызова должно быть разрешение, чтобы соединить со всеми URL в кодовой базе путь URL; иначе, загрузчик класса контекста текущего потока будет использоваться вместо загрузчика кодовой базы.
loadProxyClass
метод пытается возвратить динамический прокси-класс с именованным интерфейсом следующим образом:Если
defaultLoader
параметр не -null
и все именованные интерфейсы могут быть разрешены через тот загрузчик, тогда,
- если все разрешенные интерфейсы
public
, тогда это сначала пытается получить динамический прокси-класс (использованиеProxy.getProxyClass
) для разрешенных интерфейсов, определенных в загрузчике кодовой базы; если та попытка бросаетIllegalArgumentException
, это тогда пытается получить динамический прокси-класс для разрешенных интерфейсов, определенных вdefaultLoader
. Если обе попытки бросаютIllegalArgumentException
, тогда этот метод бросает aClassNotFoundException
. Если какое-либо другое исключение выдается, то исключение выдается к вызывающей стороне.- если весь из не -
public
разрешенные интерфейсы определяются в том же самом загрузчике класса, тогда он пытается получить динамический прокси-класс для разрешенных интерфейсов, определенных в том загрузчике.- иначе, a
LinkageError
бросается (потому что класс, который реализует все указанные интерфейсы, не может быть определен ни в каком загрузчике).Иначе, если все именованные интерфейсы могут быть разрешены через загрузчик кодовой базы, то,
- если все разрешенные интерфейсы
public
, тогда это пытается получить динамический прокси-класс для разрешенных интерфейсов в загрузчике кодовой базы. Если попытка бросаетIllegalArgumentException
, тогда этот метод бросает aClassNotFoundException
.- если весь из не -
public
разрешенные интерфейсы определяются в том же самом загрузчике класса, тогда он пытается получить динамический прокси-класс для разрешенных интерфейсов, определенных в том загрузчике.- иначе, a
LinkageError
бросается (потому что класс, который реализует все указанные интерфейсы, не может быть определен ни в каком загрузчике).Иначе, a
ClassNotFoundException
бросается для одного из именованных интерфейсов, которые не могли быть разрешены.
SecurityException
- если есть менеджер безопасности и вызов checkPermission
сбои метода@Deprecated public static Object getSecurityContext(ClassLoader loader)
loader
- загрузчик класса, от которого можно получить контекст защитыSecurityManager.getSecurityContext()
Для дальнейшей ссылки API и документации разработчика, см.
Авторское право © 1993, 2011, Oracle и/или его филиалы. Все права защищены.