Module  java.management

Interface ClassLoaderRepository



  • public interface ClassLoaderRepository

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

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

    当MBean在MBean服务器中注册时,如果它是ClassLoader的子类,并且未实现接口PrivateClassLoader ,则将其添加到MBean服务器的ClassLoaderRepositoryClassLoaderRepository 如果随后从MBean服务器未注册,它将从ClassLoaderRepository删除。

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

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

      • loadClassWithout

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

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

        请注意,如果ClassLoaderRepository中的ClassLoader从其loadClass方法中调用此方法,则如果ClassLoaderRepository中的另一个ClassLoader在同一时间执行相同操作,则会将其暴露为死锁。 建议采用loadClassBefore(java.lang.ClassLoader, java.lang.String)方法避免死锁的危险。

        参数
        className - 要加载的类的名称。
        exclude - 要排除的类加载器。 可能为null,在这种情况下,此方法相当于loadClass(className)
        结果
        加载类。
        异常
        ClassNotFoundException - 找不到指定的类。
      • loadClassBefore

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

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

        通常这种方法是从loadClass的stop方法中stop ,以查看在ClassLoaderRepository之前出现的ClassLoaderRepository 通过达到stop停止搜索,避免了并发类加载的潜在死锁。

        参数
        className - 要加载的类的名称。
        stop - 要停止的类加载器。 可能为null,在这种情况下,此方法相当于loadClass(className)
        结果
        加载类。
        异常
        ClassNotFoundException - 找不到指定的类。