public class ContextClassLoaderLocal extends Object
期望的使用方法如下:
public class SomeClass {
private static final ContextClassLoaderLocal global
= new ContextClassLoaderLocal() {
protected Object initialValue() {
return new String("Initial value");
};
public void testGlobal() {
String s = (String) global.get();
System.out.println("global value:" + s);
buf.set("New Value");
}
注意: 这个类需要小心一些,确保使用这个类的组件由容器来“取消部署”, 特定的组件classloader和所有相关联的类(和他们的表态变量)进行垃圾回收。 不幸的是有一个场景这个类不会正常工作,更不幸的是没有已知的解决方法: 当组件被取消部署,组件(或容器)调用该类实例的“unset”方法 该问题发生于:
| 构造器和说明 |
|---|
ContextClassLoaderLocal()
构造方法
|
| 限定符和类型 | 方法和说明 |
|---|---|
Object |
get()
获取实例
这是一个伪单例。
|
protected Object |
initialValue()
返回这个 ContextClassLoaderLocal 的初始值变量
每一次调用该方法的为每一个 ContextClassLoaderLocal 的 ContextClassLoader
首次访问为get或set。
|
void |
set(Object value)
设置值 - 一个值提供一个线程的 ContextClassLoader
这种机制提供了在同一个web容器中部署的应用程序之间的隔离
|
void |
unset()
卸载当前线程ContextClassLoader关联的对象
|
void |
unset(ClassLoader classLoader)
卸载当前线程ContextClassLoader关联的对象
|
protected Object initialValue()
public Object get()
public void set(Object value)
value - 新的线程ContextClassLoader关联的对象public void unset()
public void unset(ClassLoader classLoader)
classLoader - 需要卸载的ClassLoaderCopyright © 2016. All rights reserved.