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