| java.lang.instrument.ClassFileTransformer
ClassFileTransformer | public interface ClassFileTransformer (Code) | | 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
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.
|
Method Summary | |
public byte[] | transform(ClassLoader loader, String className, Class> classBeingRedefined, 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. |
transform | public byte[] transform(ClassLoader loader, String className, Class> classBeingRedefined, ProtectionDomain protectionDomain, byte[] classfileBuffer) throws IllegalClassFormatException(Code) | | 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.
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
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 .
Parameters: loader - the defining ClassLoader for thecandidate class to be transformed. Parameters: className - the fully qualified name of the candidate class to betransformed in the fully/qualified/Name format. Parameters: classBeingRedefined - if a class redefinition is in process then this argument willbe the Class object for the class. Otherwise,if a class definition is in process, a null . Parameters: protectionDomain - the security protection domain for the class being defined orredefined. Parameters: classfileBuffer - a byte array containing the class to betransformed in Class file format.This argumentmust not be modified. if transformation occurs, a newly allocated byte array containing the modified version ofclassfileBuffer , otherwise null . throws: IllegalClassFormatException - if the classfileBuffer does not contain awell-formed representation of a class in theClass file format. Note that if an invocationof this operation ends on an exception throw then (a) theremaining transformers in the "chain" will stillhave this method called, and (b) the class definition orredefinition that was the catalyst for the transformationopportunities will still be attempted. |
|
|