Module java.management

Interface ClassLoaderRepository


public interface ClassLoaderRepository

此接口的实例用于保持在MBean服务器中注册的ClassLoader列表。它们提供了使用注册的ClassLoader加载类所需的方法。

ClassLoaderRepository中的第一个ClassLoader始终是MBean服务器自己的ClassLoader。

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

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

自版本:
1.5
参见:
  • Method Details

    • loadClass

      Class<?> loadClass(String className) throws ClassNotFoundException

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

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

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

      通过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

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

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

      通常,此方法从stoploadClass方法中调用,以查阅在ClassLoaderRepository中出现在其前面的加载器。通过在达到stop时立即停止搜索,可以避免与并发类加载的潜在死锁。

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