Package net.sf.cglib.core
Class AbstractClassGenerator<T>
- java.lang.Object
-
- net.sf.cglib.core.AbstractClassGenerator<T>
-
- All Implemented Interfaces:
ClassGenerator
- Direct Known Subclasses:
BeanCopier.Generator,BeanGenerator,BeanMap.Generator,BulkBean.Generator,ConstructorDelegate.Generator,Enhancer,FastClass.Generator,ImmutableBean.Generator,InterfaceMaker,KeyFactory.Generator,MethodDelegate.Generator,Mixin.Generator,MulticastDelegate.Generator,ParallelSorter.Generator,StringSwitcher.Generator
public abstract class AbstractClassGenerator<T> extends Object implements ClassGenerator
Abstract class for all code-generating CGLIB utilities. In addition to caching generated classes for performance, it provides hooks for customizing theClassLoader, name of the generated class, and transformations applied before generation.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description protected static classAbstractClassGenerator.ClassLoaderDataprotected static classAbstractClassGenerator.Source
-
Constructor Summary
Constructors Modifier Constructor Description protectedAbstractClassGenerator(AbstractClassGenerator.Source source)
-
Method Summary
All Methods Static Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description protected Objectcreate(Object key)protected abstract ObjectfirstInstance(Class type)protected Classgenerate(AbstractClassGenerator.ClassLoaderData data)booleangetAttemptLoad()ClassLoadergetClassLoader()protected StringgetClassName()static AbstractClassGeneratorgetCurrent()Used internally by CGLIB.protected abstract ClassLoadergetDefaultClassLoader()NamingPolicygetNamingPolicy()protected ProtectionDomaingetProtectionDomain()Returns the protection domain to use when defining the class.GeneratorStrategygetStrategy()booleangetUseCache()protected abstract ObjectnextInstance(Object instance)voidsetAttemptLoad(boolean attemptLoad)If set, CGLIB will attempt to load classes from the specifiedClassLoaderbefore generating them.voidsetClassLoader(ClassLoader classLoader)Set theClassLoaderin which the class will be generated.protected voidsetNamePrefix(String namePrefix)voidsetNamingPolicy(NamingPolicy namingPolicy)Override the default naming policy.voidsetStrategy(GeneratorStrategy strategy)Set the strategy to use to create the bytecode from this generator.voidsetUseCache(boolean useCache)Whether use and update the static cache of generated classes for a class with the same properties.protected ObjectunwrapCachedValue(T cached)protected TwrapCachedClass(Class klass)-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface net.sf.cglib.core.ClassGenerator
generateClass
-
-
-
-
Constructor Detail
-
AbstractClassGenerator
protected AbstractClassGenerator(AbstractClassGenerator.Source source)
-
-
Method Detail
-
setNamePrefix
protected void setNamePrefix(String namePrefix)
-
getClassName
protected final String getClassName()
-
setClassLoader
public void setClassLoader(ClassLoader classLoader)
Set theClassLoaderin which the class will be generated. Concrete subclasses ofAbstractClassGenerator(such asEnhancer) will try to choose an appropriate default if this is unset.Classes are cached per-
ClassLoaderusing aWeakHashMap, to allow the generated classes to be removed when the associated loader is garbage collected.- Parameters:
classLoader- the loader to generate the new class with, or null to use the default
-
setNamingPolicy
public void setNamingPolicy(NamingPolicy namingPolicy)
Override the default naming policy.- Parameters:
namingPolicy- the custom policy, or null to use the default- See Also:
DefaultNamingPolicy
-
getNamingPolicy
public NamingPolicy getNamingPolicy()
-
setUseCache
public void setUseCache(boolean useCache)
Whether use and update the static cache of generated classes for a class with the same properties. Default istrue.
-
getUseCache
public boolean getUseCache()
- See Also:
setUseCache(boolean)
-
setAttemptLoad
public void setAttemptLoad(boolean attemptLoad)
If set, CGLIB will attempt to load classes from the specifiedClassLoaderbefore generating them. Because generated class names are not guaranteed to be unique, the default isfalse.
-
getAttemptLoad
public boolean getAttemptLoad()
-
setStrategy
public void setStrategy(GeneratorStrategy strategy)
Set the strategy to use to create the bytecode from this generator. By default an instance of {@see DefaultGeneratorStrategy} is used.
-
getStrategy
public GeneratorStrategy getStrategy()
-
getCurrent
public static AbstractClassGenerator getCurrent()
Used internally by CGLIB. Returns theAbstractClassGeneratorthat is being used to generate a class in the current thread.
-
getClassLoader
public ClassLoader getClassLoader()
-
getDefaultClassLoader
protected abstract ClassLoader getDefaultClassLoader()
-
getProtectionDomain
protected ProtectionDomain getProtectionDomain()
Returns the protection domain to use when defining the class.Default implementation returns
nullfor using a default protection domain. Sub-classes may override to use a more specific protection domain.- Returns:
- the protection domain (
nullfor using a default)
-
generate
protected Class generate(AbstractClassGenerator.ClassLoaderData data)
-
firstInstance
protected abstract Object firstInstance(Class type) throws Exception
- Throws:
Exception
-
-