public interface ClassLoaderRepository
此接口的实例用于保留在MBean服务器中注册的ClassLoaders列表。 它们提供了使用注册的ClassLoaders加载类的必要方法。
ClassLoaderRepository中的第一个ClassLoaderRepository
始终是MBean服务器自己的ClassLoader。
当一个MBean在MBean服务器中注册时,如果它是ClassLoader
的子类,并且如果没有实现接口PrivateClassLoader
,则将其添加到MBean Server ClassLoaderRepository
的ClassLoaderRepository
。 如果随后从MBean服务器注销,它是从去除ClassLoaderRepository
。
ClassLoaderRepository
中的MBean的ClassLoaderRepository
是重要的。 对于ClassLoaderRepository
中的任何两个MBean X和Y ,如果X的注册在Y的注册开始之前ClassLoaderRepository
, X必须出现在Y之前。 如果X和Y同时注册,其顺序是不确定的。 一个MBean的注册对应于所述呼叫到MBeanServer.registerMBean(java.lang.Object, javax.management.ObjectName)
或的一个MBeanServer
种 .createMBean
方法。
MBeanServerFactory
Modifier and Type | Method and Description |
---|---|
类<?> |
loadClass(String className)
通过类加载器列表加载给定的类名。
|
类<?> |
loadClassBefore(ClassLoader stop, String className)
通过加载器列表加载给定的类名,停止在给定的类名称。
|
类<?> |
loadClassWithout(ClassLoader exclude, String className)
通过类加载器列表加载给定的类名,不包括给定的类名。
|
类<?> loadClass(String className) throws ClassNotFoundException
通过类加载器列表加载给定的类名。 要求ClassLoaderRepository中的每个ClassLoader通过其ClassLoader.loadClass(String)
方法加载该类。 如果它成功返回一个类
对象,那就是这个方法的结果。 如果它抛出一个ClassNotFoundException
,搜索继续下一个ClassLoader。 如果它引发另一个异常,则从该方法传播异常。 如果达到列表的末尾 ,则会抛出一个ClassNotFoundException
。
className
- 要加载的类的名称。
ClassNotFoundException
- 找不到指定的类。
类<?> loadClassWithout(ClassLoader exclude, String className) throws ClassNotFoundException
通过类加载器列表加载给定的类名,不包括给定的类名。 来自ClassLoaderRepository的除了exclude
之外的每个ClassLoader都被要求通过其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(ClassLoader stop, String className) throws ClassNotFoundException
通过加载器列表加载给定的类名,停止在给定的类名称。 要求ClassLoaderRepository中的每个ClassLoader通过其ClassLoader.loadClass(String)
方法加载该类。 如果它成功返回一个类
对象,那就是这个方法的结果。 如果它抛出一个ClassNotFoundException
,搜索继续下一个ClassLoader。 如果它引发另一个异常,则从该方法传播异常。 如果搜索到达stop
或列表的末尾 ,则会抛出一个ClassNotFoundException
。
通常,这种方法是从所谓loadClass
的方法stop
,咨询,在出现在它之前装载机ClassLoaderRepository
。 通过达到stop
停止搜索,避免了并发类加载的潜在死锁。
className
- 要加载的类的名称。
stop
- 要停止的类加载器。
可能为null,在这种情况下,此方法相当于loadClass(className)
。
ClassNotFoundException
- 找不到指定的类。
Submit a bug or feature
For further API reference and developer documentation, see Java SE Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.
Copyright © 1993, 2014, Oracle and/or its affiliates. All rights reserved.