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的支持。ClassLoader
public 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.forName
ClassNotFoundException
- 如果类没找到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中找。null
public static URL getResource(String resourceName, ClassLoader classLoader)
ClassLoader
取得resource URL。resourceName
- 要查找的资源名,就是以"/"分隔的标识符字符串classLoader
- 在指定classLoader中查找,如果为null
,表示在
ClassLoaderUtil
的class loader中找。null
public 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
- 要查找的类名null
public static URL whichClass(String className, Class<?> referrer)
ClassLoader
中查找指定名称的类。className
- 要查找的类名referrer
- 调用者类,如果为null
,表示在ClassLoaderUtil
的class loader中找。null
public static URL whichClass(String className, ClassLoader classLoader)
ClassLoader
中查找指定名称的类。className
- 要查找的类名classLoader
- 在指定classLoader中查找,如果为null
,表示在
ClassLoaderUtil
的class loader中找。null
Copyright © 2006–2018 TinyGroup. All rights reserved.