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