org.springframework.instrument.classloading
Class SimpleInstrumentableClassLoader

java.lang.Object
  extended by java.lang.ClassLoader
      extended by org.springframework.core.DecoratingClassLoader
          extended by org.springframework.core.OverridingClassLoader
              extended by org.springframework.instrument.classloading.SimpleInstrumentableClassLoader

public class SimpleInstrumentableClassLoader
extends OverridingClassLoader

Simplistic implementation of an instrumentable ClassLoader.

Usable in tests and standalone environments.

Since:
2.0
Author:
Rod Johnson, Costin Leau

Field Summary
private  WeavingTransformer weavingTransformer
           
 
Fields inherited from class org.springframework.core.OverridingClassLoader
DEFAULT_EXCLUDED_PACKAGES
 
Constructor Summary
SimpleInstrumentableClassLoader(java.lang.ClassLoader parent)
          Create a new SimpleLoadTimeWeaver for the given ClassLoader.
 
Method Summary
 void addTransformer(java.lang.instrument.ClassFileTransformer transformer)
          Add a ClassFileTransformer to be applied by this ClassLoader.
protected  byte[] transformIfNecessary(java.lang.String name, byte[] bytes)
          Transformation hook to be implemented by subclasses.
 
Methods inherited from class org.springframework.core.OverridingClassLoader
isEligibleForOverriding, loadBytesForClass, loadClass, loadClassForOverriding, openStreamForClass
 
Methods inherited from class org.springframework.core.DecoratingClassLoader
excludeClass, excludePackage, isExcluded
 
Methods inherited from class java.lang.ClassLoader
clearAssertionStatus, defineClass, defineClass, defineClass, defineClass, definePackage, findClass, findLibrary, findLoadedClass, findResource, findResources, findSystemClass, getPackage, getPackages, getParent, getResource, getResourceAsStream, getResources, getSystemClassLoader, getSystemResource, getSystemResourceAsStream, getSystemResources, loadClass, resolveClass, setClassAssertionStatus, setDefaultAssertionStatus, setPackageAssertionStatus, setSigners
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

weavingTransformer

private final WeavingTransformer weavingTransformer
Constructor Detail

SimpleInstrumentableClassLoader

public SimpleInstrumentableClassLoader(java.lang.ClassLoader parent)
Create a new SimpleLoadTimeWeaver for the given ClassLoader.

Parameters:
parent - the ClassLoader to build a simple instrumentable ClassLoader for
Method Detail

addTransformer

public void addTransformer(java.lang.instrument.ClassFileTransformer transformer)
Add a ClassFileTransformer to be applied by this ClassLoader.

Parameters:
transformer - the ClassFileTransformer to register

transformIfNecessary

protected byte[] transformIfNecessary(java.lang.String name,
                                      byte[] bytes)
Description copied from class: OverridingClassLoader
Transformation hook to be implemented by subclasses.

The default implementation simply returns the given bytes as-is.

Overrides:
transformIfNecessary in class OverridingClassLoader
Parameters:
name - the fully-qualified name of the class being transformed
bytes - the raw bytes of the class
Returns:
the transformed bytes (never null; same as the input bytes if the transformation produced no changes)