此接口的实例用于保持在MBean服务器中注册的ClassLoader列表。它们提供了使用注册的ClassLoader加载类所需的方法。
ClassLoaderRepository
中的第一个ClassLoader始终是MBean服务器自己的ClassLoader。
当在MBean服务器中注册MBean时,如果它是ClassLoader的子类,并且没有实现接口PrivateClassLoader,它将被添加到MBean服务器的ClassLoaderRepository
的末尾。如果随后从MBean服务器中注销它,则会从ClassLoaderRepository
中删除它。
MBean在ClassLoaderRepository
中的顺序很重要。对于ClassLoaderRepository
中的任何两个MBean X和Y,如果X的注册在Y的注册开始之前完成,则X必须出现在Y之前。如果X和Y同时注册,则它们的顺序是不确定的。MBean的注册对应于调用MBeanServer.registerMBean(java.lang.Object, javax.management.ObjectName)
或一个MBeanServer
.createMBean
方法。
- 自版本:
- 1.5
- 参见:
-
Method Summary
Modifier and TypeMethodDescriptionClass
<?> 通过ClassLoader列表加载给定的类名。Class
<?> loadClassBefore
(ClassLoader stop, String className) 通过ClassLoader列表加载给定的类名,在给定的ClassLoader处停止。Class
<?> loadClassWithout
(ClassLoader exclude, String className) 通过ClassLoader列表加载给定的类名,排除给定的ClassLoader。
-
Method Details
-
loadClass
通过ClassLoader列表加载给定的类名。依次询问ClassLoaderRepository中的每个ClassLoader,通过其
ClassLoader.loadClass(String)
方法加载类。如果成功返回一个Class
对象,则该方法的结果就是这个对象。如果抛出ClassNotFoundException
,则继续搜索下一个ClassLoader。如果抛出其他异常,则从此方法传播异常。如果到达列表末尾,则抛出ClassNotFoundException
。- 参数:
-
className
- 要加载的类的名称。 - 返回:
- 加载的类。
- 抛出:
-
ClassNotFoundException
- 无法找到指定的类。
-
loadClassWithout
通过ClassLoader列表加载给定的类名,排除给定的ClassLoader。依次询问ClassLoaderRepository中除
exclude
之外的每个ClassLoader,通过其ClassLoader.loadClass(String)
方法加载类。如果成功返回一个Class
对象,则该方法的结果就是这个对象。如果抛出ClassNotFoundException
,则继续搜索下一个ClassLoader。如果抛出其他异常,则从此方法传播异常。如果到达列表末尾,则抛出ClassNotFoundException
。请注意,如果ClassLoaderRepository中的一个ClassLoader从其
loadClass
方法调用此方法,那么如果ClassLoaderRepository中的另一个ClassLoader同时执行相同操作,它将面临死锁的风险。建议使用loadClassBefore(java.lang.ClassLoader, java.lang.String)
方法以避免死锁风险。- 参数:
-
exclude
- 要排除的ClassLoader。可以为null,在这种情况下,此方法等效于loadClass(className)
。 -
className
- 要加载的类的名称。 - 返回:
- 加载的类。
- 抛出:
-
ClassNotFoundException
- 无法找到指定的类。
-
loadClassBefore
通过ClassLoader列表加载给定的类名,停在给定的ClassLoader处。依次询问ClassLoaderRepository中的每个ClassLoader,通过其
ClassLoader.loadClass(String)
方法加载类。如果成功返回一个Class
对象,则该方法的结果就是这个对象。如果抛出ClassNotFoundException
,则继续搜索下一个ClassLoader。如果抛出其他异常,则从此方法传播异常。如果搜索到达stop
或列表末尾,则抛出ClassNotFoundException
。通常,此方法从
stop
的loadClass
方法中调用,以查阅在ClassLoaderRepository
中出现在其前面的加载器。通过在达到stop
时立即停止搜索,可以避免与并发类加载的潜在死锁。- 参数:
-
stop
- 要停止的ClassLoader。可以为null,在这种情况下,此方法等效于loadClass(className)
。 -
className
- 要加载的类的名称。 - 返回:
- 加载的类。
- 抛出:
-
ClassNotFoundException
- 无法找到指定的类。
-