模块  java.management

Interface ClassLoaderRepository


  • public interface ClassLoaderRepository

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

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

    当MBean在MBean Server中注册时,如果它是ClassLoader的子类,并且它没有实现接口PrivateClassLoader ,则会将其添加到MBean Server的ClassLoaderRepositoryClassLoaderRepository 如果随后从MBean Server取消注册,则将其从ClassLoaderRepository删除。

    ClassLoaderRepository中MBean的ClassLoaderRepository非常重要。 对于任何两个MBean的XYClassLoaderRepository ,X必须如果X的登记Y的注册开始前完成在y之前出现。 如果XY同时注册,他们的订单是不确定的。 MBean的注册对应于对MBeanServer.registerMBean(java.lang.Object, javax.management.ObjectName)MBeanServer .createMBean方法之一的调用。

    从以下版本开始:
    1.5
    另请参见:
    MBeanServerFactory
    • 方法详细信息

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