org.springframework.instrument.classloading
Class WeavingTransformer

java.lang.Object
  extended by org.springframework.instrument.classloading.WeavingTransformer

public class WeavingTransformer
extends Object

ClassFileTransformer-based weaver, allowing for a list of transformers to be applied on a class byte array. Normally used inside class loaders.

Note: This class is deliberately implemented for minimal external dependencies, since it is included in weaver jars (to be deployed into application servers).

Since:
2.0
Author:
Rod Johnson, Costin Leau, Juergen Hoeller

Constructor Summary
WeavingTransformer(ClassLoader classLoader)
          Create a new WeavingTransformer for the given class loader.
 
Method Summary
 void addTransformer(ClassFileTransformer transformer)
          Add a class file transformer to be applied by this weaver.
 byte[] transformIfNecessary(String className, byte[] bytes)
          Apply transformation on a given class byte definition.
 byte[] transformIfNecessary(String className, String internalName, byte[] bytes, ProtectionDomain pd)
          Apply transformation on a given class byte definition.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

WeavingTransformer

public WeavingTransformer(ClassLoader classLoader)
Create a new WeavingTransformer for the given class loader.

Parameters:
classLoader - the ClassLoader to build a transformer for
Method Detail

addTransformer

public void addTransformer(ClassFileTransformer transformer)
Add a class file transformer to be applied by this weaver.

Parameters:
transformer - the class file transformer to register

transformIfNecessary

public byte[] transformIfNecessary(String className,
                                   byte[] bytes)
Apply transformation on a given class byte definition. The method will always return a non-null byte array (if no transformation has taken place the array content will be identical to the original one).

Parameters:
className - the full qualified name of the class in dot format (i.e. some.package.SomeClass)
bytes - class byte definition
Returns:
(possibly transformed) class byte definition

transformIfNecessary

public byte[] transformIfNecessary(String className,
                                   String internalName,
                                   byte[] bytes,
                                   ProtectionDomain pd)
Apply transformation on a given class byte definition. The method will always return a non-null byte array (if no transformation has taken place the array content will be identical to the original one).

Parameters:
className - the full qualified name of the class in dot format (i.e. some.package.SomeClass)
internalName - class name internal name in / format (i.e. some/package/SomeClass)
bytes - class byte definition
pd - protection domain to be used (can be null)
Returns:
(possibly transformed) class byte definition