-
public interface ClassLoaderRepository
此接口的实例用于保留在MBean Server中注册的ClassLoaders列表。 它们提供了使用已注册的ClassLoader加载类的必要方法。
ClassLoaderRepository
的第一个ClassLoader始终是MBean Server自己的ClassLoader。当MBean在MBean Server中注册时,如果它是
ClassLoader
的子类,并且它没有实现接口PrivateClassLoader
,则会将其添加到MBean Server的ClassLoaderRepository
的ClassLoaderRepository
。 如果随后从MBean Server取消注册,则将其从ClassLoaderRepository
删除。ClassLoaderRepository
中MBean的ClassLoaderRepository
非常重要。 对于任何两个MBean的X和Y在ClassLoaderRepository
,X必须如果X的登记Y的注册开始前完成在y之前出现。 如果X和Y同时注册,他们的订单是不确定的。 MBean的注册对应于对MBeanServer.registerMBean(java.lang.Object, javax.management.ObjectName)
或MBeanServer
.createMBean
方法之一的调用。- 从以下版本开始:
- 1.5
- 另请参见:
-
MBeanServerFactory
-
-
方法摘要
所有方法 实例方法 抽象方法 变量和类型 方法 描述 类<?>
loadClass(String className)
通过类加载器列表加载给定的类名。类<?>
loadClassBefore(ClassLoader stop, String className)
通过类加载器列表加载给定的类名,停在给定的类名。类<?>
loadClassWithout(ClassLoader exclude, String className)
通过类加载器列表加载给定的类名,不包括给定的类加载器。
-
-
-
方法详细信息
-
loadClass
类<?> loadClass(String className) throws ClassNotFoundException
通过类加载器列表加载给定的类名。 然后要求ClassLoaderRepository中的每个ClassLoader通过其
ClassLoader.loadClass(String)
方法加载该类。 如果它成功返回类
对象,则这是此方法的结果。 如果它抛出ClassNotFoundException
,则继续搜索下一个ClassLoader。 如果它抛出另一个异常,则从该方法传播异常。 如果到达列表的末尾,则抛出ClassNotFoundException
。- 参数
-
className
- 要加载的类的名称。 - 结果
- 加载的类。
- 异常
-
ClassNotFoundException
- 找不到指定的类。
-
loadClassWithout
类<?> loadClassWithout(ClassLoader exclude, String className) throws ClassNotFoundException
通过类加载器列表加载给定的类名,不包括给定的类加载器。 反过来来自ClassLoaderRepository的每个ClassLoader(
exclude
除外)被要求通过其ClassLoader.loadClass(String)
方法加载该类。 如果它成功返回类
对象,则这是此方法的结果。 如果它抛出ClassNotFoundException
,搜索将继续下一个ClassLoader。 如果它抛出另一个异常,则从该方法传播异常。 如果到达列表的末尾,则抛出ClassNotFoundException
。请注意,如果ClassLoaderRepository中的ClassLoader从其
loadClass
方法调用此方法,则如果ClassLoaderRepository中的另一个ClassLoader同时执行相同的操作,则会将自身暴露给死锁。 建议使用loadClassBefore(java.lang.ClassLoader, java.lang.String)
方法以避免死锁的风险。- 参数
-
className
- 要加载的类的名称。 -
exclude
- 要排除的类加载器。 可以为null,在这种情况下,此方法等效于loadClass(className)
。 - 结果
- 加载的类。
- 异常
-
ClassNotFoundException
- 找不到指定的类。
-
loadClassBefore
类<?> loadClassBefore(ClassLoader stop, String className) throws ClassNotFoundException
通过类加载器列表加载给定的类名,停在给定的类名。 然后,要求ClassLoaderRepository中的每个ClassLoader通过其
ClassLoader.loadClass(String)
方法加载该类。 如果它成功返回类
对象,则这是此方法的结果。 如果它抛出ClassNotFoundException
,则继续搜索下一个ClassLoader。 如果它抛出另一个异常,则从该方法传播异常。 如果搜索到达stop
或列表末尾,则抛出ClassNotFoundException
。通常,该方法从
loadClass
方法stop
,以查阅在ClassLoaderRepository
中出现在其之前的ClassLoaderRepository
。 通过在达到stop
立即停止搜索,可以避免并发类加载的潜在死锁。- 参数
-
className
- 要加载的类的名称。 -
stop
- 要停止的类加载器。 可以为null,在这种情况下,此方法等效于loadClass(className)
。 - 结果
- 加载的类。
- 异常
-
ClassNotFoundException
- 找不到指定的类。
-
-