-
public interface ClassLoaderRepository此接口的实例用于保留在MBean服务器中注册的ClassLoaders列表。 它们提供了使用注册的ClassLoaders加载类的必要方法。
一个
ClassLoaderRepository的第一个ClassLoader始终是MBean服务器自己的ClassLoader。当MBean在MBean服务器中注册时,如果它是
ClassLoader的子类,并且未实现接口PrivateClassLoader,则将其添加到MBean服务器的ClassLoaderRepository的ClassLoaderRepository。 如果随后从MBean服务器未注册,它将从ClassLoaderRepository删除。ClassLoaderRepository中MBeans的ClassLoaderRepository很重要。 对于ClassLoaderRepository中的任何两个MBean X和Y ,如果X的注册在Y的注册开始之前完成, X必须出现在Y之前。 如果X和Y同时注册,其顺序是不确定的。 MBean的注册对应于对MBeanServer.registerMBean(java.lang.Object, javax.management.ObjectName)的调用或MBeanServer.createMBean方法之一。- 从以下版本开始:
- 1.5
- 另请参见:
-
MBeanServerFactory
-
-
方法摘要
所有方法 接口方法 抽象方法 Modifier and Type 方法 描述 Class<?>loadClass(String className)通过类加载器列表加载给定的类名。Class<?>loadClassBefore(ClassLoader stop, String className)通过加载器列表加载给定的类名,停止在给定的类名称。Class<?>loadClassWithout(ClassLoader exclude, String className)通过类加载器列表加载给定的类名,不包括给定的类名。
-
-
-
方法详细信息
-
loadClass
Class<?> loadClass(String className) throws ClassNotFoundException
通过类加载器列表加载给定的类名。 要求ClassLoaderRepository中的每个ClassLoader通过其
ClassLoader.loadClass(String)方法加载该类。 如果它成功返回一个Class对象,那就是这个方法的结果。 如果它抛出一个ClassNotFoundException,搜索继续下一个ClassLoader。 如果它引发另一个异常,则从该方法传播异常。 如果达到列表的末尾,则抛出一个ClassNotFoundException。- 参数
-
className- 要加载的类的名称。 - 结果
- 加载类。
- 异常
-
ClassNotFoundException- 找不到指定的类。
-
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- 找不到指定的类。
-
-