public class ClassLoaderUtil extends Object
查找并装入类和资源的辅助类。
ClassLoaderUtil查找类和资源的效果, 相当于ClassLoader.loadClass
方法和ClassLoader.getResource方法。 但ClassLoaderUtil
总是首先尝试从Thread.getContextClassLoader()方法取得
ClassLoader中并装入类和资源。 这种方法避免了在多级ClassLoader
的情况下,找不到类或资源的情况。
假设有如下情况:
A是从系统ClassLoader装入的(classpath)B是Web Application中的一个类,是由servlet引擎的ClassLoader
动态装入的C.properties也在Web Application中,只有servlet引擎的动态
ClassLoader可以找到它B调用工具类A的方法,希望通过类A取得资源文件
C.properties
如果类A使用
getClass().getClassLoader().getResource("C.properties")
, 就会失败,因为系统ClassLoader不能找到此资源。
但类A可以使用ClassLoaderUtil.getResource("C.properties"),就可以找到这个资源,
因为ClassLoaderUtil调用Thread.currentThead().getContextClassLoader()
取得了servlet引擎的ClassLoader, 从而找到了这个资源文件。
| Constructor and Description |
|---|
ClassLoaderUtil() |
| Modifier and Type | Method and Description |
|---|---|
static ClassLoader |
getContextClassLoader()
取得当前线程的
ClassLoader。这个功能需要JDK1.2或更高版本的JDK的支持。 |
static URL |
getResource(String resourceName)
从
ClassLoader取得resource URL。按如下顺序查找: |
static URL |
getResource(String resourceName,
Class<?> referrer)
从指定调用者所属的
ClassLoader取得resource URL。 |
static URL |
getResource(String resourceName,
ClassLoader classLoader)
从指定的
ClassLoader取得resource URL。 |
static InputStream |
getResourceAsStream(String resourceName)
从
ClassLoader取得resource的输入流。 相当于
getResource(resourceName).openStream()。 |
static InputStream |
getResourceAsStream(String resourceName,
Class<?> referrer)
从
ClassLoader取得resource的输入流。 相当于
getResource(resourceName,
referrer).openStream()。 |
static InputStream |
getResourceAsStream(String resourceName,
ClassLoader classLoader)
从
ClassLoader取得resource的输入流。 相当于
getResource(resourceName,
classLoader).openStream()。 |
static URL[] |
getResources(String resourceName)
从
ClassLoader取得所有resource URL。按如下顺序查找:
在当前线程的ClassLoader中查找。
在装入自己的ClassLoader中查找。
通过ClassLoader.getSystemResource方法查找。
|
static URL[] |
getResources(String resourceName,
Class<?> referrer)
从指定调用者所属的
ClassLoader取得所有resource URL。 |
static URL[] |
getResources(String resourceName,
ClassLoader classLoader)
从指定的
ClassLoader中取得所有resource URL。如果未指定
ClassLoader, 则从装载ClassLoaderUtil的
ClassLoader中取得所有resource URL。 |
static Class<?> |
loadClass(String className)
从当前线程的
ClassLoader装入类。对于JDK1.2以下,则相当于
Class.forName。 |
static Class<?> |
loadClass(String className,
Class<?> referrer)
从指定的调用者的
ClassLoader装入类。 |
static Class<?> |
loadClass(String className,
ClassLoader classLoader)
从指定的
ClassLoader中装入类。如果未指定ClassLoader, 则从装载
ClassLoaderUtil的ClassLoader中装入。 |
static Object |
newInstance(String className)
从当前线程的
ClassLoader装入类并实例化之。 |
static Object |
newInstance(String className,
Class<?> referrer)
从指定的调用者的
ClassLoader装入类并实例化之。 |
static Object |
newInstance(String className,
ClassLoader classLoader)
从指定的
ClassLoader中装入类并实例化之。如果未指定ClassLoader, 则从装载
ClassLoaderUtil的ClassLoader中装入。 |
static URL |
whichClass(String className)
从当前线程的
ClassLoader中查找指定名称的类。 |
static URL |
whichClass(String className,
Class<?> referrer)
从当前线程的
ClassLoader中查找指定名称的类。 |
static URL |
whichClass(String className,
ClassLoader classLoader)
从当前线程的
ClassLoader中查找指定名称的类。 |
static URL[] |
whichClasses(String className)
从当前线程的
ClassLoader中查找指定名称的类。 |
static URL[] |
whichClasses(String className,
Class<?> referrer)
从当前线程的
ClassLoader中查找指定名称的类。 |
static URL[] |
whichClasses(String className,
ClassLoader classLoader)
从当前线程的
ClassLoader中查找指定名称的类。 |
public static ClassLoader getContextClassLoader()
ClassLoader。这个功能需要JDK1.2或更高版本的JDK的支持。ClassLoaderpublic static Class<?> loadClass(String className) throws ClassNotFoundException
ClassLoader装入类。对于JDK1.2以下,则相当于
Class.forName。className - 要装入的类名ClassNotFoundException - 如果类没找到public static Class<?> loadClass(String className, Class<?> referrer) throws ClassNotFoundException
ClassLoader装入类。className - 要装入的类名referrer - 调用者类,如果为null,则该方法相当于
Class.forNameClassNotFoundException - 如果类没找到public static Class<?> loadClass(String className, ClassLoader classLoader) throws ClassNotFoundException
ClassLoader中装入类。如果未指定ClassLoader, 则从装载
ClassLoaderUtil的ClassLoader中装入。className - 要装入的类名classLoader - 从指定的ClassLoader中装入类,如果为null
,表示从ClassLoaderUtil所在的class loader中装载ClassNotFoundException - 如果类没找到public static Object newInstance(String className) throws ClassNotFoundException, ClassInstantiationException
ClassLoader装入类并实例化之。className - 要实例化的类名ClassNotFoundException - 如果类没找到ClassInstantiationException - 如果实例化失败public static Object newInstance(String className, Class<?> referrer) throws ClassNotFoundException, ClassInstantiationException
ClassLoader装入类并实例化之。className - 要实例化的类名referrer - 调用者类,如果为null,则从ClassLoaderUtil
所在的class loader装载ClassNotFoundException - 如果类没找到ClassInstantiationException - 如果实例化失败public static Object newInstance(String className, ClassLoader classLoader) throws ClassNotFoundException, ClassInstantiationException
ClassLoader中装入类并实例化之。如果未指定ClassLoader, 则从装载
ClassLoaderUtil的ClassLoader中装入。className - 要实例化的类名classLoader - 从指定的ClassLoader中装入类,如果为null
,表示从ClassLoaderUtil所在的class loader中装载ClassNotFoundException - 如果类没找到ClassInstantiationException - 如果实例化失败public static URL[] getResources(String resourceName)
ClassLoader取得所有resource URL。按如下顺序查找:
ClassLoader中查找。ClassLoader中查找。ClassLoader.getSystemResource方法查找。resourceName - 要查找的资源名,就是以"/"分隔的标识符字符串public static URL[] getResources(String resourceName, Class<?> referrer)
ClassLoader取得所有resource URL。resourceName - 要查找的资源名,就是以"/"分隔的标识符字符串referrer - 调用者类,如果为null,表示在ClassLoaderUtil
的class loader中找public static URL[] getResources(String resourceName, ClassLoader classLoader)
ClassLoader中取得所有resource URL。如果未指定
ClassLoader, 则从装载ClassLoaderUtil的
ClassLoader中取得所有resource URL。resourceName - 要查找的资源名,就是以"/"分隔的标识符字符串classLoader - 从指定的ClassLoader中查找public static URL getResource(String resourceName)
从ClassLoader取得resource URL。按如下顺序查找:
ClassLoader中查找。ClassLoader中查找。ClassLoader.getSystemResource方法查找。resourceName - 要查找的资源名,就是以"/"分隔的标识符字符串public static URL getResource(String resourceName, Class<?> referrer)
ClassLoader取得resource URL。resourceName - 要查找的资源名,就是以"/"分隔的标识符字符串referrer - 调用者类,如果为null,表示在ClassLoaderUtil
的class loader中找。nullpublic static URL getResource(String resourceName, ClassLoader classLoader)
ClassLoader取得resource URL。resourceName - 要查找的资源名,就是以"/"分隔的标识符字符串classLoader - 在指定classLoader中查找,如果为null,表示在
ClassLoaderUtil的class loader中找。nullpublic static InputStream getResourceAsStream(String resourceName)
ClassLoader取得resource的输入流。 相当于
getResource(resourceName).openStream()。resourceName - 要查找的资源名,就是以"/"分隔的标识符字符串public static InputStream getResourceAsStream(String resourceName, Class<?> referrer)
ClassLoader取得resource的输入流。 相当于
getResource(resourceName,
referrer).openStream()。resourceName - 要查找的资源名,就是以"/"分隔的标识符字符串referrer - 调用者类,如果为null,表示在ClassLoaderUtil
的class loader中找。public static InputStream getResourceAsStream(String resourceName, ClassLoader classLoader)
ClassLoader取得resource的输入流。 相当于
getResource(resourceName,
classLoader).openStream()。resourceName - 要查找的资源名,就是以"/"分隔的标识符字符串classLoader - 在指定classLoader中查找,如果为null,表示在
ClassLoaderUtil的class loader中找。public static URL[] whichClasses(String className)
ClassLoader中查找指定名称的类。className - 要查找的类名public static URL[] whichClasses(String className, Class<?> referrer)
ClassLoader中查找指定名称的类。className - 要查找的类名referrer - 调用者类,如果为null,表示在ClassLoaderUtil
的class loader中找。public static URL[] whichClasses(String className, ClassLoader classLoader)
ClassLoader中查找指定名称的类。className - 要查找的类名classLoader - 在指定classLoader中查找,如果为null,表示在
ClassLoaderUtil的class loader中找。public static URL whichClass(String className)
ClassLoader中查找指定名称的类。className - 要查找的类名nullpublic static URL whichClass(String className, Class<?> referrer)
ClassLoader中查找指定名称的类。className - 要查找的类名referrer - 调用者类,如果为null,表示在ClassLoaderUtil
的class loader中找。nullpublic static URL whichClass(String className, ClassLoader classLoader)
ClassLoader中查找指定名称的类。className - 要查找的类名classLoader - 在指定classLoader中查找,如果为null,表示在
ClassLoaderUtil的class loader中找。nullCopyright © 2006–2018 TinyGroup. All rights reserved.