org.springframework.instrument.classloading
Class WeavingTransformer

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

public class WeavingTransformer
extends java.lang.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

Field Summary
private  java.lang.ClassLoader classLoader
           
private  java.util.List<java.lang.instrument.ClassFileTransformer> transformers
           
 
Constructor Summary
WeavingTransformer(java.lang.ClassLoader classLoader)
          Create a new WeavingTransformer for the given class loader.
 
Method Summary
 void addTransformer(java.lang.instrument.ClassFileTransformer transformer)
          Add a class file transformer to be applied by this weaver.
 byte[] transformIfNecessary(java.lang.String className, byte[] bytes)
          Apply transformation on a given class byte definition.
 byte[] transformIfNecessary(java.lang.String className, java.lang.String internalName, byte[] bytes, java.security.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
 

Field Detail

classLoader

private final java.lang.ClassLoader classLoader

transformers

private final java.util.List<java.lang.instrument.ClassFileTransformer> transformers
Constructor Detail

WeavingTransformer

public WeavingTransformer(java.lang.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(java.lang.instrument.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(java.lang.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(java.lang.String className,
                                   java.lang.String internalName,
                                   byte[] bytes,
                                   java.security.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