org.springframework.instrument.classloading.tomcat

## Class TomcatInstrumentableClassLoader

- java.lang.Object
- - java.lang.ClassLoader
  - - java.security.SecureClassLoader
    - - java.net.URLClassLoader
      - - org.apache.catalina.loader.WebappClassLoader
        - - org.springframework.instrument.classloading.tomcat.TomcatInstrumentableClassLoader

All Implemented Interfaces:
  Closeable, AutoCloseable, org.apache.catalina.Lifecycle, org.apache.catalina.loader.Reloader

    public class TomcatInstrumentableClassLoader
    extends org.apache.catalina.loader.WebappClassLoader

Extension of Tomcat's default class loader which adds instrumentation to loaded classes without the need to use a VM-wide agent.

To be registered using a `<a href="http://tomcat.apache.org/tomcat-5.5-doc/config/loader.html">Loader</a>` tag in Tomcat's `<a href="http://tomcat.apache.org/tomcat-5.5-doc/config/context.html">Context</a>` definition in the `server.xml` file, with the Spring-provided "spring-tomcat-weaver.jar" file deployed into Tomcat's "server/lib" (for Tomcat 5.x) or "lib" (for Tomcat 6.x) directory. The required configuration tag looks as follows:

    <Loader loaderClass="org.springframework.instrument.classloading.tomcat.TomcatInstrumentableClassLoader"/>

Typically used in combination with a `ReflectiveLoadTimeWeaver` defined in the Spring application context. The `addTransformer` and `getThrowawayClassLoader` methods mirror the corresponding methods in the LoadTimeWeaver interface, as expected by ReflectiveLoadTimeWeaver.

See the PetClinic sample application for a full example of this ClassLoader in action.

NOTE: Requires Apache Tomcat version 5.0 or higher.

Since:
  2.0
Author:
  Costin Leau, Juergen Hoeller
See Also:
  `addTransformer(java.lang.instrument.ClassFileTransformer)`, `getThrowawayClassLoader()`, `ReflectiveLoadTimeWeaver`

### Nested Class Summary

### Nested classes/interfaces inherited from class org.apache.catalina.loader.WebappClassLoader

`org.apache.catalina.loader.WebappClassLoader.PrivilegedFindResource`

### Field Summary

### Fields inherited from class org.apache.catalina.loader.WebappClassLoader

`allPermission, delegate, ENABLE_CLEAR_REFERENCES, files, hasExternalRepositories, jarFiles, jarNames, jarPath, jarRealFiles, lastJarAccessed, lastModifiedDates, loaderDir, loaderPC, log, needConvert, notFoundResources, packageTriggers, parent, paths, permissionList, repositories, repositoryURLs, resourceEntries, resources, securityManager, sm, started, system, triggers`

### Fields inherited from interface org.apache.catalina.Lifecycle

`AFTER_START_EVENT, AFTER_STOP_EVENT, BEFORE_START_EVENT, BEFORE_STOP_EVENT, DESTROY_EVENT, INIT_EVENT, PERIODIC_EVENT, START_EVENT, STOP_EVENT`

### Constructor Summary

Constructors
Constructor and Description
`TomcatInstrumentableClassLoader()` Create a new `TomcatInstrumentableClassLoader` using the current context class loader.
`TomcatInstrumentableClassLoader(ClassLoader parent)` Create a new `TomcatInstrumentableClassLoader` with the supplied class loader as parent.

### Method Summary

Methods
`void` `addTransformer(ClassFileTransformer transformer)` Delegate for LoadTimeWeaver's `addTransformer` method.
`protected org.apache.catalina.loader.ResourceEntry` `findResourceInternal(String name, String path)`
`ClassLoader` `getThrowawayClassLoader()` Delegate for LoadTimeWeaver's `getThrowawayClassLoader` method.
`String` `toString()`

### Methods inherited from class org.apache.catalina.loader.WebappClassLoader

`addLifecycleListener, addPermission, addPermission, addPermission, addRepository, addURL, clearReferences, closeJARs, deleteDir, filter, findClass, findClassInternal, findLifecycleListeners, findLoadedClass0, findLoadedResource, findRepositories, findResource, findResourceInternal, findResources, getAntiJARLocking, getDelegate, getJarPath, getPermissions, getResource, getResourceAsStream, getResources, getURI, getURL, getURLs, isPackageSealed, loadClass, loadClass, loadedByThisOrChild, modified, nullInstance, openJARs, refreshPolicy, removeLifecycleListener, setAntiJARLocking, setDelegate, setJarPath, setParentClassLoader, setResources, setWorkDir, start, stop, validate, validateJarFile`

### Methods inherited from class java.net.URLClassLoader

`close, definePackage, newInstance, newInstance`

### Methods inherited from class java.security.SecureClassLoader

`defineClass, defineClass`

### Methods inherited from class java.lang.ClassLoader

`clearAssertionStatus, defineClass, defineClass, defineClass, defineClass, definePackage, findLibrary, findLoadedClass, findSystemClass, getClassLoadingLock, getPackage, getPackages, getParent, getResources, getSystemClassLoader, getSystemResource, getSystemResourceAsStream, getSystemResources, registerAsParallelCapable, resolveClass, setClassAssertionStatus, setDefaultAssertionStatus, setPackageAssertionStatus, setSigners`

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait`

### Constructor Detail

#### TomcatInstrumentableClassLoader

    public TomcatInstrumentableClassLoader()

Create a new `TomcatInstrumentableClassLoader` using the current context class loader.

See Also:
  `TomcatInstrumentableClassLoader(ClassLoader)`

#### TomcatInstrumentableClassLoader

    public TomcatInstrumentableClassLoader(ClassLoader parent)

Create a new `TomcatInstrumentableClassLoader` with the supplied class loader as parent.

Parameters:
  `parent` - the parent `ClassLoader` to be used

### Method Detail

#### addTransformer

    public void addTransformer(ClassFileTransformer transformer)

Delegate for LoadTimeWeaver's `addTransformer` method. Typically called through ReflectiveLoadTimeWeaver.

See Also:
  `LoadTimeWeaver.addTransformer(java.lang.instrument.ClassFileTransformer)`, `ReflectiveLoadTimeWeaver`

#### getThrowawayClassLoader

    public ClassLoader getThrowawayClassLoader()

Delegate for LoadTimeWeaver's `getThrowawayClassLoader` method. Typically called through ReflectiveLoadTimeWeaver.

See Also:
  `LoadTimeWeaver.getThrowawayClassLoader()`, `ReflectiveLoadTimeWeaver`

#### findResourceInternal

    protected org.apache.catalina.loader.ResourceEntry findResourceInternal(String name,
                                                                String path)

Overrides:
  `findResourceInternal` in class `org.apache.catalina.loader.WebappClassLoader`

#### toString

    public String toString()

Overrides:
  `toString` in class `org.apache.catalina.loader.WebappClassLoader`