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
-
Method Summary
Modifier and TypeMethodDescriptionabstract String
getClassAnnotation
(Class<?> cl) abstract ClassLoader
getClassLoader
(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
-