Module java.rmi
Package java.rmi.server

Class RMIClassLoaderSpi

java.lang.Object
java.rmi.server.RMIClassLoaderSpi

public abstract class RMIClassLoaderSpi extends Object
RMIClassLoaderSpiRMIClassLoader 的服务提供者接口。具体来说,一个 RMIClassLoaderSpi 实例提供了 RMIClassLoader 的以下静态方法的实现: 当调用这些方法之一时,其行为是委托给此类的相应方法的实例。每个方法如何委托给提供者实例的详细信息在每个特定方法的文档中描述。请参阅 RMIClassLoader 的文档,了解如何选择提供者实例的描述。
自版本:
1.4
参见:
  • 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,或者如果 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 路径加载类的类加载器。

      如果存在安全管理器,将调用其 checkPermission 方法,其中包含 RuntimePermission("getClassLoader") 权限;这可能导致 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