Package net.sf.cglib.core
Class AbstractClassGenerator.ClassLoaderData
- java.lang.Object
-
- net.sf.cglib.core.AbstractClassGenerator.ClassLoaderData
-
- Enclosing class:
- AbstractClassGenerator<T>
protected static class AbstractClassGenerator.ClassLoaderData extends java.lang.Object
-
-
Field Summary
Fields Modifier and Type Field Description private java.lang.ref.WeakReference<java.lang.ClassLoader>
classLoader
Note: ClassLoaderData object is stored as a value ofWeakHashMap<ClassLoader, ...>
thus this classLoader reference should be weak otherwise it would make classLoader strongly reachable and alive forever.private LoadingCache<AbstractClassGenerator,java.lang.Object,java.lang.Object>
generatedClasses
AbstractClassGenerator
here holds "cache key" (e.g.private static Function<AbstractClassGenerator,java.lang.Object>
GET_KEY
private java.util.Set<java.lang.String>
reservedClassNames
private Predicate
uniqueNamePredicate
-
Constructor Summary
Constructors Constructor Description ClassLoaderData(java.lang.ClassLoader classLoader)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description java.lang.Object
get(AbstractClassGenerator gen, boolean useCache)
java.lang.ClassLoader
getClassLoader()
Predicate
getUniqueNamePredicate()
void
reserveName(java.lang.String name)
-
-
-
Field Detail
-
reservedClassNames
private final java.util.Set<java.lang.String> reservedClassNames
-
generatedClasses
private final LoadingCache<AbstractClassGenerator,java.lang.Object,java.lang.Object> generatedClasses
AbstractClassGenerator
here holds "cache key" (e.g.Enhancer
configuration), and the value is the generated class plus some additional values (seeAbstractClassGenerator.unwrapCachedValue(Object)
.The generated classes can be reused as long as their classloader is reachable.
Note: the only way to access a class is to find it through generatedClasses cache, thus the key should not expire as long as the class itself is alive (its classloader is alive).
-
classLoader
private final java.lang.ref.WeakReference<java.lang.ClassLoader> classLoader
Note: ClassLoaderData object is stored as a value ofWeakHashMap<ClassLoader, ...>
thus this classLoader reference should be weak otherwise it would make classLoader strongly reachable and alive forever. Reference queue is not required since the cleanup is handled byWeakHashMap
.
-
uniqueNamePredicate
private final Predicate uniqueNamePredicate
-
GET_KEY
private static final Function<AbstractClassGenerator,java.lang.Object> GET_KEY
-
-
Method Detail
-
getClassLoader
public java.lang.ClassLoader getClassLoader()
-
reserveName
public void reserveName(java.lang.String name)
-
getUniqueNamePredicate
public Predicate getUniqueNamePredicate()
-
get
public java.lang.Object get(AbstractClassGenerator gen, boolean useCache)
-
-