org.springframework.instrument.classloading

## Class SimpleInstrumentableClassLoader

- java.lang.Object
- - java.lang.ClassLoader
  - - org.springframework.core.DecoratingClassLoader
    - - org.springframework.core.OverridingClassLoader
      - - 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

    - ### Fields inherited from class org.springframework.core.OverridingClassLoader

      `DEFAULT_EXCLUDED_PACKAGES`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `SimpleInstrumentableClassLoader(ClassLoader parent)` Create a new `SimpleLoadTimeWeaver` for the given `ClassLoader`.

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `void` | `addTransformer(ClassFileTransformer transformer)` Add a `ClassFileTransformer` to be applied by this `ClassLoader`.
    `protected byte[]` | `transformIfNecessary(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, getClassLoadingLock, getPackage, getPackages, getParent, getResource, getResourceAsStream, getResources, getSystemClassLoader, getSystemResource, getSystemResourceAsStream, getSystemResources, loadClass, registerAsParallelCapable, 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

    - #### SimpleInstrumentableClassLoader

          public SimpleInstrumentableClassLoader(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(ClassFileTransformer transformer)

      Add a `ClassFileTransformer` to be applied by this `ClassLoader`.
      Parameters:
        `transformer` - the `ClassFileTransformer` to register

    - #### transformIfNecessary

          protected byte[] transformIfNecessary(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)