java.rmi.server

接口
异常
java.lang.Object
  继承者 java.rmi.server.RMIClassLoaderSpi

public abstract class RMIClassLoaderSpi
     
extends Object

RMIClassLoaderSpiRMIClassLoader 的服务提供者接口。尤其是,RMIClassLoaderSpi 接口提供 RMIClassLoader 的以下静态方法的实现:

当调用这些方法之一时,其行为是向此类的实例委托相应的方法。有关每个方法如何委托给提供者实例的详细信息,在各自特定方法的文档中进行了描述。有关如何选择提供者实例的描述,请参阅 RMIClassLoader 文档。

从以下版本开始:
1.4
另请参见:
RMIClassLoader

构造方法摘要
RMIClassLoaderSpi()
           
 
方法摘要
abstract  String getClassAnnotation(Class<?> cl)
          提供 RMIClassLoader.getClassAnnotation(Class) 的实现。
abstract  ClassLoader getClassLoader(String codebase)
          提供 RMIClassLoader.getClassLoader(String) 的实现。
abstract  Class<?> loadClass(String codebase, String name, ClassLoader defaultLoader)
          提供 RMIClassLoader.loadClass(URL,String)RMIClassLoader.loadClass(String,String)RMIClassLoader.loadClass(String,String,ClassLoader) 的实现。
abstract  Class<?> loadProxyClass(String codebase, String[] interfaces, ClassLoader defaultLoader)
          提供 RMIClassLoader.loadProxyClass(String,String[],ClassLoader) 的实现。
 
从类 java.lang.Object 继承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

构造方法详细信息

RMIClassLoaderSpi

public RMIClassLoaderSpi()
方法详细信息

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,或者如果 codebasenull 且用于加载类的特定于提供者的 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,或者如果 codebasenull 且用于加载类的特定于提供者的 URL 无效。
ClassNotFoundException - 如果在指定位置无法找到某个指定接口的定义,或者如果动态代理类的创建失败(例如,如果 Proxy.getProxyClass(ClassLoader,Class[]) 抛出给定接口列表的 IllegalArgumentException

getClassLoader

public abstract ClassLoader getClassLoader(String codebase)
                                    throws MalformedURLException
提供 RMIClassLoader.getClassLoader(String) 的实现。返回从给定代码基 URL 路径加载类的类加载器。

如果存在安全管理器,则使用 RuntimePermission("getClassLoader") 权限调用其 checkPermission 方法;这会导致 SecurityException。此方法的实现还可以执行进一步的安全检查,以验证调用上下文是否具有连接到代码基 URL 路径中的所有 URL 的权限。

参数:
codebase - 返回的类加载器将从其加载类的 URL 列表(由空格分隔),或 null
返回:
从给定代码基 URL 路径加载类的类加载器
抛出:
MalformedURLException - 如果 codebase 为非 null 且包含一个无效 URL,或者如果 codebasenull 且用于标识类加载器的特定于提供者的 URL 无效
SecurityException - 如果存在安全管理器且其 checkPermission 方法的调用失败,或者如果调用方没有连接到代码基 URL 路径中所有 URL 的权限

getClassAnnotation

public abstract String getClassAnnotation(Class<?> cl)
提供 RMIClassLoader.getClassAnnotation(Class) 的实现。返回表示类定义位置的注释字符串,RMI 将在编组给定类的对象时用其注释类描述符。

参数:
cl - 要获得其注释的类
返回:
在编组时用于注释给定类的字符串,或 null
抛出:
NullPointerException - 如果 clnull