- java.lang.Object
-
- java.rmi.server.RMIClassLoaderSpi
-
public abstract class RMIClassLoaderSpi extends Object
RMIClassLoaderSpi
是服务提供者接口RMIClassLoader
。 特别地,RMIClassLoaderSpi
实例提供了以下静态方法的RMIClassLoader
: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
- 另请参见:
-
RMIClassLoader
-
-
-
构造方法摘要
构造方法 Constructor 描述 RMIClassLoaderSpi()
-
方法摘要
所有方法 接口方法 抽象方法 Modifier and Type 方法 描述 abstract 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)
-
-
-
方法详细信息
-
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路径加载类,可选地使用提供的加载程序。 通常,在尝试从代码库URL路径解析类之前,提供者实现将尝试使用给定的defaultLoader
(如果指定)来解析命名类。该方法的实现必须返回具有给定名称的类或引发异常。
- 参数
-
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)
的实现。 加载一个动态代理类(参见Proxy
,可以从代码库URL路径中实现一组与给定名称的接口,可选地使用提供的加载程序。此方法的实现必须返回实现命名接口的代理类或抛出异常。
- 参数
-
codebase
- 加载类的URL列表(空格分隔),或null
-
interfaces
- 要实现的代理类的接口的名称 -
defaultLoader
- 要使用的附加上下文类加载器,或null
- 结果
- 一个实现命名接口的动态代理类
- 异常
-
MalformedURLException
- 如果codebase
不是null
并且包含无效的URL,或者如果codebase
是null
并且用于加载类的提供者特定的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,或者如果codebase
是null
并且用于标识类加载器的提供者特定URL无效 -
SecurityException
- 如果有安全管理器,并且其checkPermission
方法的调用失败,或者主叫方没有权限连接到代码库URL路径中的所有URL
-
getClassAnnotation
public abstract String getClassAnnotation(Class<?> cl)
提供RMIClassLoader.getClassAnnotation(Class)
的实现。 返回在编组给定类的对象时,RMI将用于注释类描述符的注释字符串(表示类定义的位置)。- 参数
-
cl
- 获取注释的类 - 结果
-
一个字符串,用于在给定的类进行编组时用于注释,或者是
null
- 异常
-
NullPointerException
- 如果cl
是null
-
-