public class

OverridingClassLoader

extends DecoratingClassLoader
java.lang.Object
   ↳ java.lang.ClassLoader
     ↳ org.springframework.core.DecoratingClassLoader
       ↳ org.springframework.core.OverridingClassLoader
Known Direct Subclasses

Class Overview

ClassLoader that does not always delegate to the parent loader, as normal class loaders do. This enables, for example, instrumentation to be forced in the overriding ClassLoader, or a "throwaway" class loading behavior, where selected classes are temporarily loaded in the overriding ClassLoader, in order to load an instrumented version of the class in the parent ClassLoader later on.

Summary

Fields
public static final String[] DEFAULT_EXCLUDED_PACKAGES Packages that are excluded by default
Public Constructors
OverridingClassLoader(ClassLoader parent)
Create a new OverridingClassLoader for the given class loader.
Protected Methods
boolean isEligibleForOverriding(String className)
Determine whether the specified class is eligible for overriding by this class loader.
byte[] loadBytesForClass(String name)
Load the defining bytes for the given class, to be turned into a Class object through a defineClass(byte[], int, int) call.
Class loadClass(String name, boolean resolve)
Class loadClassForOverriding(String name)
Load the specified class for overriding purposes in this ClassLoader.
InputStream openStreamForClass(String name)
Open an InputStream for the specified class.
byte[] transformIfNecessary(String name, byte[] bytes)
Transformation hook to be implemented by subclasses.
[Expand]
Inherited Methods
From class org.springframework.core.DecoratingClassLoader
From class java.lang.ClassLoader
From class java.lang.Object

Fields

public static final String[] DEFAULT_EXCLUDED_PACKAGES

Also: SpringCore

Packages that are excluded by default

Public Constructors

public OverridingClassLoader (ClassLoader parent)

Also: SpringCore

Create a new OverridingClassLoader for the given class loader.

Parameters
parent the ClassLoader to build an overriding ClassLoader for

Protected Methods

protected boolean isEligibleForOverriding (String className)

Also: SpringCore

Determine whether the specified class is eligible for overriding by this class loader.

Parameters
className the class name to check
Returns
  • whether the specified class is eligible

protected byte[] loadBytesForClass (String name)

Also: SpringCore

Load the defining bytes for the given class, to be turned into a Class object through a defineClass(byte[], int, int) call.

The default implementation delegates to openStreamForClass(String) and transformIfNecessary(String, byte[]).

Parameters
name the name of the class
Returns
  • the byte content (with transformers already applied), or null if no class defined for that name
Throws
ClassNotFoundException if the class for the given name couldn't be loaded

protected Class loadClass (String name, boolean resolve)

protected Class loadClassForOverriding (String name)

Also: SpringCore

Load the specified class for overriding purposes in this ClassLoader.

The default implementation delegates to findLoadedClass(String), loadBytesForClass(String) and defineClass(byte[], int, int).

Parameters
name the name of the class
Returns
  • the Class object, or null if no class defined for that name
Throws
ClassNotFoundException if the class for the given name couldn't be loaded

protected InputStream openStreamForClass (String name)

Also: SpringCore

Open an InputStream for the specified class.

The default implementation loads a standard class file through the parent ClassLoader's getResourceAsStream method.

Parameters
name the name of the class
Returns
  • the InputStream containing the byte code for the specified class

protected byte[] transformIfNecessary (String name, byte[] bytes)

Also: SpringCore

Transformation hook to be implemented by subclasses.

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

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)