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