ClassFileTransformerpublic interface ClassFileTransformer This interface must be implemented by types used to instrument classes as
they are loaded by a running VM. Implementations are registered by agents in
the {@link java.lang.instrument.Instrumentation#addTransformer} operation.
Once registered, a ClassFileTransformer has the opportunity to
instrument every class that is loaded or redefined by the VM provided that
the transformer does not have a dependency on that class.
Transformations of classes takes place just prior to them being defined by
the VM.
|
Methods Summary |
---|
public byte[] | transform(java.lang.ClassLoader loader, java.lang.String className, java.lang.Class classBeingRedefined, java.security.ProtectionDomain protectionDomain, byte[] classfileBuffer)Receives a byte array containing the raw contents of a
class for possible transformation into a new byte
array which gets returned to the caller. It is left up to the
implementation to decide what, if any, transformations are carried out
and returned.
Requests for class transformations can occur in two situations.
- the attempted defining of a class using
{@link ClassLoader#defineClass(java.lang.String, byte[], int, int)}
- the attempted re-defining of a previously defined class using
{@link Instrumentation#redefineClasses(ClassDefinition[])}
In both cases this operation will be called before the verification of
the specified bytes in the Class file format. Each
registered ClassFileTransformer instance will have this
operation called on it. The order of the invocations matches the order in
which the transformers were registered using the method
{@link Instrumentation#addTransformer(ClassFileTransformer)}.
Provided that the implementation of this method wishes to carry out a
transformation, the return is a newly allocated byte array
which contains a copy of the classfileBuffer
argument plus the transformations to the array specific to the method
implementation. If the transformer is written so as to pass on the
opportunity to modify a given input then the return value should be
null .
|
|