|
|||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | ||||||||||
java.lang.Objectnet.sf.cglib.core.AbstractClassGenerator
net.sf.cglib.Enhancer
Generates dynamic subclasses to enable method interception. This class started as a substitute for the standard Dynamic Proxy support included with JDK 1.3, but one that allowed the proxies to extend a concrete base class, in addition to implementing interfaces. The dynamically generated subclasses override the non-final methods of the superclass and have hooks which callback to user-defined interceptor implementations.
The original and most general callback type is the MethodInterceptor, which
in AOP terms enables "around advice"--that is, you can invoke custom code both before
and after the invocation of the "super" method. In addition you can modify the
arguments before calling the super method, or not call it at all.
Although MethodInterceptor is generic enough to meet any
interception need, it is often overkill. For simplicity and performance, additional
specialized callback types, such as LazyLoader are also available.
Often a single callback type will be used per enhanced class, but you can control
which callback is used on a per-method basis with a CallbackFilter.
The most common uses of this class are embodied in the static helper methods. For
advanced needs, such as customizing the ClassLoader to use, you should create
a new instance of Enhancer. Other classes within CGLIB follow a similar pattern.
For an almost drop-in replacement for
java.lang.reflect.Proxy, see the Proxy class.
| Nested Class Summary |
| Nested classes inherited from class net.sf.cglib.core.AbstractClassGenerator |
AbstractClassGenerator.Source |
| Constructor Summary | |
Enhancer()
Create a new Enhancer. |
|
| Method Summary | |
Factory |
create()
Generate a new class if necessary and uses the specified callbacks (if any) to create a new object instance. |
Factory |
create(java.lang.Class[] argumentTypes,
java.lang.Object[] arguments)
Generate a new class if necessary and uses the specified callbacks (if any) to create a new object instance. |
static Factory |
create(java.lang.Class type,
Callback callback)
Helper method to create an intercepted object. |
static Factory |
create(java.lang.Class superclass,
java.lang.Class[] interfaces,
Callback callback)
Helper method to create an intercepted object. |
static Factory |
create(java.lang.Class superclass,
java.lang.Class[] interfaces,
CallbackFilter filter,
Callbacks callbacks)
Helper method to create an intercepted object. |
java.lang.Class |
createClass()
Generate a new class if necessary and return it without creating a new instance. |
protected java.lang.Object |
firstInstance(java.lang.Class type)
|
void |
generateClass(org.objectweb.asm.ClassVisitor v)
|
protected java.lang.ClassLoader |
getDefaultClassLoader()
|
protected java.lang.Object |
nextInstance(java.lang.Object instance)
|
void |
setCallback(Callback callback)
Set the single Callback to use. |
void |
setCallbackFilter(CallbackFilter filter)
Set the CallbackFilter used to map the generated class' methods
to a particular callback type. |
void |
setCallbacks(Callbacks callbacks)
Register the callbacks to use when creating the new object instance. |
void |
setInterfaces(java.lang.Class[] interfaces)
Set the interfaces to implement. |
void |
setSuperclass(java.lang.Class superclass)
Set the class which the generated class will extend. |
| Methods inherited from class net.sf.cglib.core.AbstractClassGenerator |
create, getClassLoader, getClassName, setClassLoader, setNamePrefix, setNamingPolicy, setTransformer |
| Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
| Constructor Detail |
public Enhancer()
Enhancer. A new Enhancer
object should be used for each generated object, and should not
be shared across threads. To create additional instances of a
generated class, use the Factory interface.
Factory| Method Detail |
public void setSuperclass(java.lang.Class superclass)
setInterfaces
will be called with the appropriate argument instead.
Non-interfaces arguments must not be declared as final, and must have an
accessible constructor.
superclass - class to extend or interface to implementsetInterfaces(Class[])public void setInterfaces(java.lang.Class[] interfaces)
Factory interface will
always be implemented regardless of what is specified here.
interfaces - array of interfaces to implement, or nullFactorypublic void setCallbackFilter(CallbackFilter filter)
CallbackFilter used to map the generated class' methods
to a particular callback type. See the Callbacks interface for a
description of the various callback types.
New object instances will always use the same mapping, but may use different
actual callback objects.
filter - the callback filter to use when generating a new classCallbackspublic void setCallback(Callback callback)
Callback to use. This will override any
CallbackFilter that has been specified previously, and
ensure that every applicable method is mapped to the given callback
object.
Ignored if you use createClass.
callback - the callback to use for all methodssetCallbackFilter(net.sf.cglib.CallbackFilter),
setCallbacks(net.sf.cglib.Callbacks),
createClass()public void setCallbacks(Callbacks callbacks)
Callbacks)
returned by the registered CallbackFilter, the
Callbacks argument should return a non-null
Callback implementation (where applicable--for
instance the Callbacks.NO_OP type does not have an
associated implementation).
Ignored if you use createClass.
callbacks - callback implementations to use for the enhanced objectSimpleCallbacks,
setCallbackFilter(net.sf.cglib.CallbackFilter),
createClass()public Factory create()
public Factory create(java.lang.Class[] argumentTypes,
java.lang.Object[] arguments)
argumentTypes
parameter, with the given arguments.
argumentTypes - constructor signaturearguments - compatible wrapped arguments to pass to constructor
public java.lang.Class createClass()
create method.
create(Class[], Object[])protected java.lang.ClassLoader getDefaultClassLoader()
getDefaultClassLoader in class AbstractClassGenerator
public void generateClass(org.objectweb.asm.ClassVisitor v)
throws java.lang.Exception
java.lang.Exception
protected java.lang.Object firstInstance(java.lang.Class type)
throws java.lang.Exception
firstInstance in class AbstractClassGeneratorjava.lang.Exceptionprotected java.lang.Object nextInstance(java.lang.Object instance)
nextInstance in class AbstractClassGenerator
public static Factory create(java.lang.Class type,
Callback callback)
type - class to extend or interface to implementcallback - the callback to use for all methods
public static Factory create(java.lang.Class superclass,
java.lang.Class[] interfaces,
Callback callback)
interfaces - array of interfaces to implement, or nullcallback - the callback to use for all methods
public static Factory create(java.lang.Class superclass,
java.lang.Class[] interfaces,
CallbackFilter filter,
Callbacks callbacks)
interfaces - array of interfaces to implement, or nullfilter - the callback filter to use when generating a new classcallbacks - callback implementations to use for the enhanced object
|
|||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | ||||||||||