|
|||||||||
摘要: 嵌套 | 字段 | 构造方法 | 方法 | 详细信息: 字段 | 构造方法 | 方法 |
java.rmi.server
类 RMIClassLoader
java.lang.Object java.rmi.server.RMIClassLoader
-
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
且具有一个公共无参数的构造方法,则调用构造方法来创建提供程序实例。如果定义了属性,但这些条件的所有其他项都不为 true,则向尝试使用RMIClassLoader
的代码抛出一个不确定的Error
,以指示获取提供程序实例失败。 - 如果名为
META-INF/services/java.rmi.server.RMIClassLoaderSpi
的资源对于系统类加载器来说是可见的,则将该资源的内容解释为提供程序配置文件,并将在该文件中指定的第一个类名称用作提供程序类名称。如果可以通过系统类加载器加载具有该名称的类,并且该类可分配给RMIClassLoaderSpi
且有一个公共无参数的构造方法,则调用该构造方法以创建提供程序实例。如果找到了资源,但无法按描述的方式实例化提供程序,则向尝试使用RMIClassLoader
的代码抛出一个不确定的Error
,以指示未成功获得提供程序实例。 - 否则,提供程序实例将是通过调用
getDefaultProviderInstance()
方法返回的值。
- 从以下版本开始:
- JDK1.1
- 另请参见:
-
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) 从基本代码 URL 路径加载一个实现一组具有给定名称的接口的动态代理类(请参阅 Proxy )。 |
从类 java.lang.Object 继承的方法 |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
方法详细信息 |
---|
loadClass
@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)
loadClass
public static Class<?> loadClass(URL codebase, String name) throws MalformedURLException, ClassNotFoundException
-
从基本代码 URL 加载类。 如果
codebase
为null
,则此方法将与具有null
、codebase
和给定类名的loadClass(String,String)
行为相同。此方法委托给提供程序实例的
RMIClassLoaderSpi.loadClass(String,String,ClassLoader)
方法,将在给定 URL 上调用URL.toString()
的结果(或者如果codebase
为 null,则为null
)作为第一个参数、name
为第二个参数和null
为第三个参数进行传递。 -
- 参数:
-
codebase
- 要从其加载类的 URL,或null
-
name
- 要加载的类的名称 - 返回:
-
表示加载的类的
Class
对象 - 抛出:
-
MalformedURLException
- 如果codebase
为null
且用于加载类的特定于提供程序的 URL 无效 -
ClassNotFoundException
- 如果在指定 URL 无法找到该类的定义
loadClass
public static Class<?> loadClass(String codebase, String name) throws MalformedURLException, ClassNotFoundException
-
从基本代码 URL 路径加载类。
此方法委托给提供程序实例的
RMIClassLoaderSpi.loadClass(String,String,ClassLoader)
方法,将codebase
作为第一个参数、name
为第二个参数和null
为第三个参数进行传递。 -
- 参数:
-
codebase
- 要从其加载类的 URL 的列表(由空格分隔),或者为null
-
name
- 要加载的类的名称 - 返回:
-
表示加载的类的
Class
对象 - 抛出:
-
MalformedURLException
- 如果codebase
为非null
且包含一个无效 URL,或者如果codebase
为null
且用于加载类的特定于提供程序的 URL 无效。 -
ClassNotFoundException
- 如果在指定位置无法找到该类的定义 - 从以下版本开始:
- 1.2
loadClass
public static Class<?> loadClass(String codebase, String name, ClassLoader defaultLoader) throws MalformedURLException, ClassNotFoundException
-
有选择地使用提供的加载器从基本代码 URL 路径加载类。当调用方想让要考虑的其他上下文类加载器(如堆栈上的调用方加载器)可用于提供程序实现时应该使用此方法。通常,提供程序实现将试图先使用给定的
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
- 如果在指定位置无法找到该类的定义 - 从以下版本开始:
- 1.4
loadProxyClass
public static Class<?> loadProxyClass(String codebase, String[] interfaces, ClassLoader defaultLoader) throws ClassNotFoundException, MalformedURLException
-
从基本代码 URL 路径加载一个实现一组具有给定名称的接口的动态代理类(请参阅
Proxy
)。将解析的接口类似于通过使用给定
codebase
的loadClass(String,String)
方法加载的类。此方法委托给提供程序实例的
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
) - 从以下版本开始:
- 1.4
getClassLoader
public static ClassLoader getClassLoader(String codebase) throws MalformedURLException, SecurityException
-
返回从给定的基本代码 URL 路径加载类的类加载器。
返回的类加载器是
loadClass(String,String)
方法将用来加载相同codebase
参数的类的类加载器。此方法委托给提供程序实例的
RMIClassLoaderSpi.getClassLoader(String)
方法,将codebase
作为第一个参数进行传递。如果存在安全管理器,则使用
RuntimePermission("getClassLoader")
权限调用其checkPermission
方法;这会导致SecurityException
。此方法的提供程序实现还可以执行进一步的安全检查,以验证调用上下文是否具有连接到代码基 URL 路径中的所有 URL 的权限。 -
- 参数:
-
codebase
- 返回的类加载器将从其加载类的 URL 列表(由空格分隔),或null
- 返回:
- 从给定代码基 URL 路径加载类的类加载器
- 抛出:
-
MalformedURLException
- 如果codebase
为非null
且包含一个无效 URL,或者如果codebase
为null
且用于标识类加载器的特定于提供方的 URL 无效 -
SecurityException
- 如果存在安全管理器且其checkPermission
方法的调用失败,或者如果调用方没有连接到代码基 URL 路径中所有 URL 的权限 - 从以下版本开始:
- 1.3
getClassAnnotation
public static String getClassAnnotation(Class<?> cl)
-
返回表示类定义位置的注释字符串,RMI 将在编组给定类的对象时用其注释类描述符。
此方法委托给提供程序实例的
RMIClassLoaderSpi.getClassAnnotation(Class)
方法,将cl
作为第一个参数进行传递。 -
- 参数:
-
cl
- 要获得其注释的类 - 返回:
-
在编组时用于注释给定类的字符串,或
null
- 抛出:
-
NullPointerException
- 如果cl
为null
- 从以下版本开始:
- 1.2