接口 ClassLoaderRepository


public interface ClassLoaderRepository

该接口的实例用于保存在 MBean Server 中注册的 ClassLoader 列表。它们提供了必要的方法来使用已注册的 ClassLoader 加载类。

ClassLoaderRepository 中的第一个 ClassLoader 始终是 MBean Server 自己的 ClassLoader。

当一个 MBean 在 MBean Server 中注册时,如果它是 ClassLoader 的子类并且它没有实现接口 PrivateClassLoader ,则它被添加到 MBean Server 的 ClassLoaderRepository 的末尾。如果它随后从 MBean Server 中注销,它就会从 ClassLoaderRepository 中删除。

ClassLoaderRepository 中 MBean 的顺序很重要。对于 ClassLoaderRepository 中的任意两个 MBean XY,如果 X 的注册在 Y 的注册开始之前完成,则 X 必须出现在 Y 之前。如果 XY 同时注册,则它们的顺序是不确定的。 MBean 的注册对应于对 MBeanServer.registerMBean(java.lang.Object, javax.management.ObjectName) MBeanServer .createMBean 方法之一的调用。

自从:
1.5
参见:
  • 方法详情

    • loadClass

      Class <?> loadClass(String  className) throws ClassNotFoundException

      通过类加载器列表加载给定的类名。依次要求来自 ClassLoaderRepository 的每个 ClassLoader 通过其 ClassLoader.loadClass(String) 方法加载类。如果它成功返回一个 Class 对象,那就是这个方法的结果。如果它抛出 ClassNotFoundException ,则继续搜索下一个类加载器。如果它抛出另一个异常,则从该方法传播异常。如果到达列表末尾,则抛出 ClassNotFoundException

      参数:
      className - 要加载的类的名称。
      返回:
      加载的类。
      抛出:
      ClassNotFoundException - 找不到指定的类。
    • loadClassWithout

      Class <?> loadClassWithout(ClassLoader  exclude, String  className) throws ClassNotFoundException

      通过类加载器列表加载给定的类名,不包括给定的。 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

      Class <?> loadClassBefore(ClassLoader  stop, String  className) throws ClassNotFoundException

      通过类加载器列表加载给定的类名,在给定的加载器处停止。依次要求来自 ClassLoaderRepository 的每个 ClassLoader 通过其 ClassLoader.loadClass(String) 方法加载类。如果它成功返回一个 Class 对象,那就是这个方法的结果。如果它抛出 ClassNotFoundException ,则继续搜索下一个类加载器。如果它抛出另一个异常,则从该方法传播异常。如果搜索到达 stop 或列表末尾,则抛出 ClassNotFoundException

      通常,此方法从 stoploadClass 方法调用,以咨询 ClassLoaderRepository 中出现在它之前的加载器。通过在到达 stop 时立即停止搜索,避免了并发类加载的潜在死锁。

      参数:
      stop - 停止的类加载器。可能为空,在这种情况下此方法等效于 loadClass(className)
      className - 要加载的类的名称。
      返回:
      加载的类。
      抛出:
      ClassNotFoundException - 找不到指定的类。