JavaTM Platform
Standard Ed. 6

java.rmi.server
�� RMIClassLoader

java.lang.Object
  �̳��� java.rmi.server.RMIClassLoader

public class RMIClassLoader
extends Object

RMIClassLoader ����֧���� RMI ���ж�̬����صľ�̬����������������λ�ã�һ������ URL��������ͻ�ȡԶ�̷�Ӧ��������������λ�õķ�������Щ������ RMI ���п��ڱ���ͽ�������а�������ʱʹ�ã�������Զ�̷������õ�ֵ�����һ�������Ӧ�ó���ֱ�ӵ��ã���ģ�� RMI �Ķ�̬�������Ϊ��

���¾�̬������ʵ��

����Щ�����ķ����ṩ�߽ӿ� RMIClassLoaderSpi ��ʵ���ṩ����������Щ����֮һʱ������Ϊ��������ṩ��ʵ��ί����Ӧ�ķ������й�ÿ���������ί�и��ṩ��ʵ������ϸ��Ϣ���ڸ����ض��������ĵ��н�����������

�����ṩ��ʵ�������·�ʽѡ��

�����°汾��ʼ��
JDK1.1
������
RMIClassLoaderSpi

����ժҪ
static String getClassAnnotation(Class<?> cl)
          ���ر�ʾ�ඨ��λ�õ�ע���ַ�����RMI ���ڱ��������Ķ���ʱ����ע������������
static ClassLoader getClassLoader(String codebase)
          ���شӸ����Ļ������� URL ·������������������
static RMIClassLoaderSpi getDefaultProviderInstance()
          ���ط����ṩ�߽ӿ� RMIClassLoaderSpi ��Ĭ���ṩ�ߵĹ淶��ʵ����
static Object getSecurityContext(ClassLoader loader)
          �ѹ�ʱ�� ���滻�汾���� Java 2 ƽ̨ v1.2 ��ʼ��RMI ����ʹ�ô˷�������ȡ��������İ�ȫ�����ġ�
static Class<?> loadClass(String name)
          �ѹ�ʱ�� �� loadClass(String,String) ����ȡ��
static Class<?> loadClass(String codebase, String name)
          �ӻ������� URL ·�������ࡣ
static Class<?> loadClass(String codebase, String name, ClassLoader defaultLoader)
          ��ѡ���ʹ���ṩ�ļ������ӻ������� URL ·�������ࡣ
static Class<?> loadClass(URL codebase, String name)
          �ӻ������� URL �����ࡣ
static Class<?> loadProxyClass(String codebase, String[] interfaces, ClassLoader defaultLoader)
          �ӻ������� URL ·������һ��ʵ��һ����и������ƵĽӿڵĶ�̬�����ࣨ����� Proxy����
 
���� java.lang.Object �̳еķ���
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

������ϸ��Ϣ

loadClass

@Deprecated
public static Class<?> loadClass(String name)
                          throws MalformedURLException,
                                 ClassNotFoundException
�ѹ�ʱ�� �� loadClass(String,String) ����ȡ��

���ؾ���ָ�� name ���ࡣ

�˷���ί�и� loadClass(String,String)���� null ��Ϊ��һ���������� name ��Ϊ�ڶ����������д��ݡ�

������
name - Ҫ���ص��������
���أ�
��ʾ���ص���� Class ����
�׳���
MalformedURLException - ������ڼ�������ض����ṩ�ߵ� URL ��Ч
ClassNotFoundException - ����ڻ���������޷��ҵ�����Ķ���
������
loadClass(String,String)

loadClass

public static Class<?> loadClass(URL codebase,
                                 String name)
                          throws MalformedURLException,
                                 ClassNotFoundException
�ӻ������� URL �����ࡣ ��� codebase Ϊ null����˷���������� null��codebase �͸��������� loadClass(String,String) ��Ϊ��ͬ��

�˷���ί�и��ṩ��ʵ���� RMIClassLoaderSpi.loadClass(String,String,ClassLoader) ���������ڸ��� URL �ϵ��� URL.toString() �Ľ����������� codebase Ϊ null����Ϊ null����Ϊ��һ��������name Ϊ�ڶ��������� null Ϊ�������������д��ݡ�

������
codebase - Ҫ���������� URL���� null
name - Ҫ���ص��������
���أ�
��ʾ���ص���� Class ����
�׳���
MalformedURLException - ��� codebase Ϊ null �����ڼ�������ض����ṩ�ߵ� URL ��Ч
ClassNotFoundException - �����ָ�� URL �޷��ҵ�����Ķ���

loadClass

public static Class<?> loadClass(String codebase,
                                 String name)
                          throws MalformedURLException,
                                 ClassNotFoundException
�ӻ������� URL ·�������ࡣ

�˷���ί�и��ṩ��ʵ���� RMIClassLoaderSpi.loadClass(String,String,ClassLoader) �������� codebase ��Ϊ��һ��������name Ϊ�ڶ��������� null Ϊ�������������д��ݡ�

������
codebase - Ҫ���������� URL ���б����ɿո�ָ���������Ϊ null
name - Ҫ���ص��������
���أ�
��ʾ���ص���� Class ����
�׳���
MalformedURLException - ��� codebase Ϊ�� null �Ұ���һ����Ч URL��������� codebase Ϊ null �����ڼ�������ض����ṩ�ߵ� URL ��Ч��
ClassNotFoundException - �����ָ��λ���޷��ҵ�����Ķ���
�����°汾��ʼ��
1.2

loadClass

public static Class<?> loadClass(String codebase,
                                 String name,
                                 ClassLoader defaultLoader)
                          throws MalformedURLException,
                                 ClassNotFoundException
��ѡ���ʹ���ṩ�ļ������ӻ������� URL ·�������ࡣ�����÷�����Ҫ���ǵ�����������������������ջ�ϵĵ��÷����������������ṩ��ʵ��ʱӦ��ʹ�ô˷�����ͨ�����ṩ��ʵ�ֽ���ͼ��ʹ�ø����� defaultLoader�����ָ��������ָ�����࣬Ȼ�����ͼ�Ӵ���� URL ·���������ࡣ

�˷���ί�и��ṩ��ʵ���� RMIClassLoaderSpi.loadClass(String,String,ClassLoader) �������� codebase ��Ϊ��һ��������name Ϊ�ڶ��������� defaultLoader Ϊ�������������д��ݡ�

������
codebase - Ҫ���������� URL ���б����ɿո�ָ���������Ϊ null
name - Ҫ���ص��������
defaultLoader - Ҫʹ�õ���������������������� null
���أ�
��ʾ���ص���� Class ����
�׳���
MalformedURLException - ��� codebase Ϊ�� null �Ұ���һ����Ч URL��������� codebase Ϊ null �����ڼ�������ض����ṩ�ߵ� URL ��Ч��
ClassNotFoundException - �����ָ��λ���޷��ҵ�����Ķ���
�����°汾��ʼ��
1.4

loadProxyClass

public static Class<?> loadProxyClass(String codebase,
                                      String[] interfaces,
                                      ClassLoader defaultLoader)
                               throws ClassNotFoundException,
                                      MalformedURLException
�ӻ������� URL ·������һ��ʵ��һ����и������ƵĽӿڵĶ�̬�����ࣨ����� Proxy����

�������Ľӿ�������ͨ��ʹ�ø��� codebase �� loadClass(String,String) �������ص��ࡣ

�˷���ί�и��ṩ��ʵ���� RMIClassLoaderSpi.loadProxyClass(String,String[],ClassLoader) �������� codebase ��Ϊ��һ��������interfaces Ϊ�ڶ��������� defaultLoader Ϊ�������������д��ݡ�

������
codebase - Ҫ���������� URL �б����ɿո�ָ������� null
interfaces - Ҫʵ�ֵĴ�����Ľӿ�����
defaultLoader - Ҫʹ�õ���������������������� null
���أ�
ʵ��ָ���ӿڵĶ�̬������
�׳���
MalformedURLException - ��� codebase Ϊ�� null �Ұ���һ����Ч URL��������� codebase Ϊ null �����ڼ�������ض����ṩ�ߵ� URL ��Ч��
ClassNotFoundException - �����ָ��λ���޷��ҵ�ij��ָ���ӿڵĶ��壬���������̬������Ĵ���ʧ�ܣ����磬��� Proxy.getProxyClass(ClassLoader,Class[]) �׳������ӿ��б��� IllegalArgumentException��
�����°汾��ʼ��
1.4

getClassLoader

public static ClassLoader getClassLoader(String codebase)
                                  throws MalformedURLException,
                                         SecurityException
���شӸ����Ļ������� URL ·������������������

���ص���������� loadClass(String,String) ����������������ͬ codebase ������������������

�˷���ί�и��ṩ��ʵ���� RMIClassLoaderSpi.getClassLoader(String) �������� codebase ��Ϊ��һ���������д��ݡ�

������ڰ�ȫ����������ʹ�� RuntimePermission("getClassLoader") Ȩ�޵����� checkPermission ��������ᵼ�� SecurityException���˷������ṩ��ʵ�ֻ�����ִ�н�һ���İ�ȫ��飬����֤�����������Ƿ�������ӵ������ URL ·���е����� URL ��Ȩ�ޡ�

������
codebase - ���ص�������������������� URL �б����ɿո�ָ������� null
���أ�
�Ӹ�������� URL ·����������������
�׳���
MalformedURLException - ��� codebase Ϊ�� null �Ұ���һ����Ч URL��������� codebase Ϊ null �����ڱ�ʶ����������ض����ṩ���� URL ��Ч
SecurityException - ������ڰ�ȫ���������� checkPermission �����ĵ���ʧ�ܣ�����������÷�û�����ӵ������ URL ·�������� URL ��Ȩ��
�����°汾��ʼ��
1.3

getClassAnnotation

public static String getClassAnnotation(Class<?> cl)
���ر�ʾ�ඨ��λ�õ�ע���ַ�����RMI ���ڱ��������Ķ���ʱ����ע������������

�˷���ί�и��ṩ��ʵ���� RMIClassLoaderSpi.getClassAnnotation(Class) �������� cl ��Ϊ��һ���������д��ݡ�

������
cl - Ҫ�����ע�͵���
���أ�
�ڱ���ʱ����ע�͸�������ַ������� null
�׳���
NullPointerException - ��� cl Ϊ null
�����°汾��ʼ��
1.2

getDefaultProviderInstance

public static RMIClassLoaderSpi getDefaultProviderInstance()
���ط����ṩ�߽ӿ� RMIClassLoaderSpi ��Ĭ���ṩ�ߵĹ淶��ʵ�������δ����ϵͳ���� java.rmi.server.RMIClassLoaderSpi���� RMIClassLoader ��̬���� ����Ĭ���ṩ�ߵĹ淶��ʵ�����������ṩ��ʵ����

������ڰ�ȫ����������ʹ�� RuntimePermission("setFactory") Ȩ�޵����� checkPermission ��������ᵼ�� SecurityException��

Ĭ�Ϸ����ṩ��ʵ�������·�ʽʵ�� RMIClassLoaderSpi��

getClassAnnotation ��������һ����ʾ�������� URL ·���� String��Զ�̷�Ӧʹ�ø�·������ָ����Ķ��塣���ص��ַ����ĸ�ʽ��һ���ɿո�ָ��� URL ·���� ���صĻ��������ַ���ȡ����ָ����Ķ������������

  • ������������ϵͳ�������������� ClassLoader.getSystemClassLoader()����ϵͳ��������ĸ������磬���ڰ�װ��չ�ļ������� ��������������������� null ��ʾ�����򷵻� java.rmi.server.codebase ���Ե�ֵ���������һ��ԭ�ȵĻ���ֵ�������δ���ø����ԣ��򷵻� null��

  • ���������������� URLClassLoader ��ʵ�����򷵻ص��ַ�����һ�� URL ���ⲿ��ʽ���ɿո�ָ����б����� URL ͨ�����ü����� getURLs �������ء���� URLClassLoader �ɴ��ṩ�ߴ��������ڵ����� loadClass �� loadProxyClass ����������Ҫ�κ�Ȩ�޼��ɻ�ȡ�����Ļ��������ַ��������������������һ�� URLClassLoader ʵ������������ڰ�ȫ������������� getURLs �������ص�ÿ�� URL ��Ҫ����һ���� checkPermission ���������õ�Ȩ��Ϊ��ÿ�� URL ���� openConnection().getPermission() ���ص�Ȩ�ޣ��������Щ���õ��κ�һ���׳� SecurityException �� IOException���򷵻� java.rmi.server.codebase ���Ե�ֵ���������ԭ�ȵĻ���ֵ�������δ���ø����ԣ��򷵻� null��

  • ����������������� URLClassLoader ��ʵ�����򷵻� java.rmi.server.codebase ���Ե�ֵ���������ԭ�ȵĻ���ֵ�������δ���ø����ԣ��򷵻� null��

�������������ķ�����ʵ�֣���Щʵ�ֶ�������Ϊ�ɿո�ָ��� URL �б�����Ϊ codebase �� String ������ÿ�����ö���һ�������������������������ͨ���� codebase �뵱ǰ�̵߳��������������һ��ʹ�ý��б�ʶ������� Thread.getContextClassLoader()�������ڰ�ȫ������ʱ�����ṩ�߽�ά���������ʵ���������� URLClassLoader ��ʵ�������ڲ�������Щ�ڲ���ͨ���丸������������������ URL ·��������� URL �б������롣��� codebase Ϊ null����������� URL ·����ϵͳ���� java.rmi.server.codebase ��ֵ���������ԭ�ȵĻ���ֵ�����ڸ����Ļ������� URL ·������·����Ϊ codebase �������ݵ���������������еķ���֮һ�ĵ��ã����������������λ�ھ���ָ���������� URL ·���ı����ҵ�ǰ�̵߳�����������������丸���ļ���������������������ļ��������򴴽�һ�������ļ��������������ӵ����С��ñ���ά����������ļ�������ǿ���ã��Ա����������Ǽ��䶨�����ڲ������⵽��ʱ���������ա�Ϊ�˷�ֹ�������ε�������뱻��ʽ���ص�������ȫ��������������У����δ���ð�ȫ�������������������������ǵ�ǰ�̵߳�����������������ṩ�Ļ������� URL ·�������ԣ����Խ�ֹ��Զ������أ���

getClassLoader ��������ָ���������� URL ·���Ļ��������������������ڰ�ȫ��������������õ���������û�����ӵ��������� URL ·���ϵ����� URL ��Ȩ�ޣ����׳� SecurityException��

loadClass �������԰����·�ʽ���ؾ���ָ�����Ƶ��ࣺ

��� defaultLoader Ϊ�� null���������ȳ���ʹ�� defaultLoader ���ؾ���ָ�� name ���࣬����ͨ������
     Class.forName(name, false, defaultLoader)
 
����� defaultLoader �ɹ��������࣬�򷵻ظ��ࡣ����׳� ClassNotFoundException ֮����쳣������쳣���׸����÷���

��Σ�loadClass ��������ʹ��ָ���������� URL ·���Ļ���������������ؾ���ָ�� name ���ࡣ������ڰ�ȫ����������õ��������ı���������ӵ��������� URL �ϵ����� URL ��Ȩ�ޣ����򣬽�ʹ�õ�ǰ�̵߳���������������������ǻ��������������

loadProxyClass �������԰����·�ʽ���ؾ���ָ���ӿڵĶ�̬�����ࣺ

��� defaultLoader ����Ϊ�� null �ҿ���ͨ���ü�������������ָ���ӿڣ���

  • ������н����Ľӿڶ�Ϊ public���������ȳ��Ի���ڻ�������������ж���Ľ����ӿڵĶ�̬�����ࣨʹ�� Proxy.getProxyClass��������ó����׳�һ�� IllegalArgumentException���������Ի���� defaultLoader �ж���Ľ����ӿڵĶ�̬�����ࡣ����������Զ��׳� IllegalArgumentException����˷������׳� ClassNotFoundException������׳��κ������쳣������쳣�����׸����÷���
  • �����ͬһ��������ж������з� public �����ӿڣ����䳢�Ի���ڸü������ж���Ľ����ӿڵĶ�̬�����ࡣ
  • �����׳� LinkageError����Ϊʵ������ָ���ӿڵ����޷����κμ������ж��壩��

�����������ָ���Ľӿڿ�ͨ�����������������������

  • ������н����ӿڶ�Ϊ public���������Ի�û��������н����ӿڵĶ�̬�����ࡣ����ó����׳� IllegalArgumentException����˷����׳�һ�� ClassNotFoundException��
  • �����ͬһ��������ж������з� public �����ӿڣ��������Ի���ڸü������ж���Ľ����ӿڵĶ�̬�����ࡣ
  • �����׳� LinkageError����Ϊʵ������ָ���ӿڵ����޷����κμ������ж��壩��

���򣬽�Ϊÿ���޷�������ָ���ӿ��׳� ClassNotFoundException��

���أ�
Ĭ�Ϸ����ṩ�ߵĹ淶��ʵ��
�׳���
SecurityException - ������ڰ�ȫ������������ checkPermission �����ĵ��ý�ʧ��
�����°汾��ʼ��
1.4

getSecurityContext

@Deprecated
public static Object getSecurityContext(ClassLoader loader)
�ѹ�ʱ�� ���滻�汾���� Java 2 ƽ̨ v1.2 ��ʼ��RMI ����ʹ�ô˷�������ȡ��������İ�ȫ�����ġ�

���ظ�����������İ�ȫ�����ġ�

������
loader - �����ȡ��ȫ�����ĵ��������
���أ�
��ȫ������
������
SecurityManager.getSecurityContext()

JavaTM Platform
Standard Ed. 6

�ύ��������
�йظ���� API �ο����ϺͿ�����Ա�ĵ�������� Java SE ������Ա�ĵ������ĵ���������ϸ�ġ����򿪷���Ա���������Լ�������������ﶨ�塢ʹ�ü��ɺ͹�������ʾ����

��Ȩ���� 2007 Sun Microsystems, Inc. ��������Ȩ���� ����������֤��������������ĵ����·ַ�������