java.lang.Object
java.rmi.server.RMIClassLoaderSpi
RMIClassLoaderSpi 是 RMIClassLoader 的服务提供者接口。具体来说,一个 RMIClassLoaderSpi 实例提供了 RMIClassLoader 的以下静态方法的实现:
RMIClassLoader.loadClass(URL,String)RMIClassLoader.loadClass(String,String)RMIClassLoader.loadClass(String,String,ClassLoader)RMIClassLoader.loadProxyClass(String,String[],ClassLoader)RMIClassLoader.getClassLoader(String)RMIClassLoader.getClassAnnotation(Class)
RMIClassLoader 的文档,了解如何选择提供者实例的描述。
- 自版本:
- 1.4
- 参见:
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionabstract StringgetClassAnnotation(Class<?> cl) abstract ClassLoadergetClassLoader(String codebase) abstract Class<?> loadClass(String codebase, String name, ClassLoader defaultLoader) abstract Class<?> loadProxyClass(String codebase, String[] interfaces, ClassLoader defaultLoader)
-
Constructor Details
-
RMIClassLoaderSpi
public RMIClassLoaderSpi()子类调用的构造函数。
-
-
Method Details
-
loadClass
public abstract Class<?> loadClass(String codebase, String name, ClassLoader defaultLoader) throws MalformedURLException, ClassNotFoundException 提供了RMIClassLoader.loadClass(URL,String),RMIClassLoader.loadClass(String,String)和RMIClassLoader.loadClass(String,String,ClassLoader)的实现。从代码库 URL 路径加载类,可选择使用提供的加载器。通常,提供者实现将尝试使用给定的defaultLoader解析命名类,如果指定的话,在尝试从代码库 URL 路径解析类之前。此方法的实现必须返回具有给定名称的类或抛出异常。
- 参数:
-
codebase- 要从中加载类的 URL 列表(以空格分隔),或null -
name- 要加载的类的名称 -
defaultLoader- 要使用的额外上下文类加载器,或null - 返回:
-
表示加载的类的
Class对象 - 抛出:
-
MalformedURLException- 如果codebase不为null并包含无效 URL,或者如果codebase为null并且用于加载类的特定于提供者的 URL 无效 -
ClassNotFoundException- 如果无法在指定位置找到类的定义
-
loadProxyClass
public abstract Class<?> loadProxyClass(String codebase, String[] interfaces, ClassLoader defaultLoader) throws MalformedURLException, ClassNotFoundException 提供了RMIClassLoader.loadProxyClass(String,String[],ClassLoader)的实现。从代码库 URL 路径加载实现了给定名称接口集的动态代理类(参见Proxy),可选择使用提供的加载器。此方法的实现必须返回实现了命名接口的代理类,或抛出异常。
- 参数:
-
codebase- 要从中加载类的 URL 列表(以空格分隔),或null -
interfaces- 要代理类实现的接口的名称 -
defaultLoader- 要使用的额外上下文类加载器,或null - 返回:
- 实现了命名接口的动态代理类
- 抛出:
-
MalformedURLException- 如果codebase不为null并包含无效 URL,或者如果codebase为null并且用于加载类的特定于提供者的 URL 无效 -
ClassNotFoundException- 如果无法在指定位置找到命名接口之一的定义,或者如果动态代理类的创建失败(例如,如果Proxy.getProxyClass(ClassLoader,Class[])对给定接口列表会抛出IllegalArgumentException)
-
getClassLoader
提供了RMIClassLoader.getClassLoader(String)的实现。返回一个从给定代码库 URL 路径加载类的类加载器。如果存在安全管理器,将调用其
checkPermission方法,其中包含RuntimePermission("getClassLoader")权限;这可能导致SecurityException。此方法的实现还可能执行进一步的安全检查,以验证调用上下文是否具有连接到代码库 URL 路径中所有 URL 的权限。- 参数:
-
codebase- 要从中返回的类加载器将从中加载类的 URL 列表(以空格分隔),或null - 返回:
- 从给定代码库 URL 路径加载类的类加载器
- 抛出:
-
MalformedURLException- 如果codebase不为null并包含无效 URL,或者如果codebase为null并且用于标识类加载器的特定于提供者的 URL 无效 -
SecurityException- 如果存在安全管理器并且调用其checkPermission方法失败,或者调用者没有连接到代码库 URL 路径中所有 URL 的权限
-
getClassAnnotation
提供了RMIClassLoader.getClassAnnotation(Class)的实现。返回注解字符串(表示类定义的位置),RMI 在序列化给定类的对象时将使用该字符串来注释类描述符。- 参数:
-
cl- 要获取注解的类 - 返回:
-
在序列化给定类时用于注释给定类的字符串,或
null - 抛出:
-
NullPointerException- 如果cl为null
-