public abstract class RMIClassLoaderSpi extends Object
RMIClassLoaderSpi
是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
的文档 。
RMIClassLoader
Constructor and Description |
---|
RMIClassLoaderSpi() |
Modifier and Type | Method and Description |
---|---|
abstract String |
getClassAnnotation(类<?> cl)
提供
RMIClassLoader.getClassAnnotation(Class) 的
实现 。
|
abstract ClassLoader |
getClassLoader(String codebase)
提供
RMIClassLoader.getClassLoader(String) 的
实现 。
|
abstract 类<?> |
loadClass(String codebase, String name, ClassLoader defaultLoader)
|
abstract 类<?> |
loadProxyClass(String codebase, String[] interfaces, ClassLoader defaultLoader)
提供
RMIClassLoader.loadProxyClass(String,String[],ClassLoader) 的
实现 。
|
public abstract 类<?> 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
类
加载类的
类
对象
MalformedURLException
- 如果
codebase
不是
null
并且包含无效URL,或者如果
codebase
是
null
,并且用于加载类的提供者特定URL无效
ClassNotFoundException
- 如果在指定位置找不到类的定义
public abstract 类<?> 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
对于给定的接口列表)
public abstract ClassLoader getClassLoader(String codebase) throws MalformedURLException
RMIClassLoader.getClassLoader(String)
的实现 。
返回从给定的代码库URL路径加载类的类加载器。
如果有一个安全管理员,其checkPermission
方法将被调用一个RuntimePermission("getClassLoader")
权限; 这可能会导致一个SecurityException
。 该方法的实现还可以执行进一步的安全检查,以验证呼叫上下文是否具有连接到代码库URL路径中的所有URL的权限。
codebase
- 返回的类加载器从其加载类的URL(空格分隔)列表,或
null
MalformedURLException
- 如果
codebase
不是
null
并且包含无效的URL,或者如果
codebase
是
null
,并且用于标识类加载器的提供者特定URL无效
SecurityException
- 如果有一个安全管理器,并且其
checkPermission
方法的调用失败,或者如果调用者没有权限连接到代码库URL路径中的所有URL
public abstract String getClassAnnotation(类<?> cl)
RMIClassLoader.getClassAnnotation(Class)
的实现 。
返回在编组给定类的对象时,RMI将用于注释类描述符的注释字符串(表示类定义的位置)。
cl
- 获取注释的类
null
NullPointerException
- 如果
cl
是
null