-
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- 找不到指定的类。
-
-