The Spring Framework

org.springframework.instrument.classloading
Class AbstractOverridingClassLoader

java.lang.Object
  extended by java.lang.ClassLoader
      extended by org.springframework.instrument.classloading.AbstractOverridingClassLoader
Direct Known Subclasses:
SimpleInstrumentableClassLoader, SimpleThrowawayClassLoader

public abstract class AbstractOverridingClassLoader
extends ClassLoader

Abstract superclass for class loaders that do not always delegate to their parent loader, as normal class loaders do. This enables, for example, instrumentation to be forced, or a "throwaway" class loader behavior, where selected classes are loaded by a child loader but not loaded by the parent.

Since:
2.0
Author:
Rod Johnson, Juergen Hoeller

Constructor Summary
protected AbstractOverridingClassLoader(ClassLoader parent)
          Create a new AbstractOverridingClassLoader for the given class loader.
 
Method Summary
 void excludeClass(String className)
          Add a class name to exclude from overriding.
 void excludePackage(String packageName)
          Add a package name to exclude from overriding.
protected  boolean isEligibleForOverriding(String className)
          Determine whether the given class name is eligible for overriding by this class loader.
protected  Class<?> loadClass(String name, boolean resolve)
           
protected abstract  byte[] transformIfNecessary(String name, byte[] bytes)
          Transformation hook to be implemented by subclasses.
 
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
 

Constructor Detail

AbstractOverridingClassLoader

protected AbstractOverridingClassLoader(ClassLoader parent)
Create a new AbstractOverridingClassLoader for the given class loader.

Parameters:
parent - the ClassLoader to build an overriding ClassLoader for
Method Detail

excludePackage

public void excludePackage(String packageName)
Add a package name to exclude from overriding.

Any class whose fully-qualified name starts with the name registered here will be handled by the parent ClassLoader in the usual fashion.

Parameters:
packageName - the package name to exclude

excludeClass

public void excludeClass(String className)
Add a class name to exclude from overriding.

Any class name registered here will be handled by the parent ClassLoader in the usual fashion.

Parameters:
className - the class name to exclude

loadClass

protected Class<?> loadClass(String name,
                             boolean resolve)
                      throws ClassNotFoundException
Overrides:
loadClass in class ClassLoader
Throws:
ClassNotFoundException

isEligibleForOverriding

protected boolean isEligibleForOverriding(String className)
Determine whether the given class name is eligible for overriding by this class loader.

The default implementation excludes all specified packages and classes.

Parameters:
className - the class name to check
See Also:
excludePackage(java.lang.String), excludeClass(java.lang.String)

transformIfNecessary

protected abstract byte[] transformIfNecessary(String name,
                                               byte[] bytes)
Transformation hook to be implemented by subclasses.

Parameters:
name - FQN of class being transformed
bytes - class bytes
Returns:
transformed bytes. Return same as input bytes if the transformation produced no changes.

The Spring Framework

Copyright © 2002-2006 The Spring Framework.