Package org.springframework.instrument.classloading

# Class InstrumentationLoadTimeWeaver

java.lang.Object
org.springframework.instrument.classloading.InstrumentationLoadTimeWeaver

All Implemented Interfaces:
  `LoadTimeWeaver`

public class InstrumentationLoadTimeWeaver extends Object implements LoadTimeWeaver
`LoadTimeWeaver` relying on VM `Instrumentation`.

Start the JVM specifying the Java agent to be used — for example, as follows where `spring-instrument-{version}.jar` is a JAR file containing the `InstrumentationSavingAgent` class shipped with Spring and where `{version}` is the release version of the Spring Framework (for example, `5.1.5.RELEASE`).

`-javaagent:path/to/spring-instrument-{version}.jar`

In Eclipse, for example, add something similar to the following to the JVM arguments for the Eclipse "Run configuration":

`-javaagent:${project_loc}/lib/spring-instrument-{version}.jar`

Since:
  2.0
Author:
  Rod Johnson, Juergen Hoeller
See Also:
  - `InstrumentationSavingAgent`

## Constructor Summary

Constructors
Constructor
Description
`InstrumentationLoadTimeWeaver()`
Create a new InstrumentationLoadTimeWeaver for the default ClassLoader.
`InstrumentationLoadTimeWeaver(ClassLoader classLoader)`
Create a new InstrumentationLoadTimeWeaver for the given ClassLoader.

## Method Summary

Modifier and Type
Method
Description
`void`
`addTransformer(ClassFileTransformer transformer)`
Add a `ClassFileTransformer` to be applied by this `LoadTimeWeaver`.
`ClassLoader`
`getInstrumentableClassLoader()`
We have the ability to weave the current class loader when starting the JVM in this way, so the instrumentable class loader will always be the current loader.
`ClassLoader`
`getThrowawayClassLoader()`
This implementation always returns a `SimpleThrowawayClassLoader`.
`static boolean`
`isInstrumentationAvailable()`
Check whether an Instrumentation instance is available for the current VM.
`void`
`removeTransformers()`
Remove all registered transformers, in inverse order of registration.

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

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

## Constructor Details

### InstrumentationLoadTimeWeaver

public InstrumentationLoadTimeWeaver()
Create a new InstrumentationLoadTimeWeaver for the default ClassLoader.

### InstrumentationLoadTimeWeaver

public InstrumentationLoadTimeWeaver(@Nullable ClassLoader classLoader)
Create a new InstrumentationLoadTimeWeaver for the given ClassLoader.

Parameters:
  `classLoader` - the ClassLoader that registered transformers are supposed to apply to

## Method Details

### addTransformer

public void addTransformer(ClassFileTransformer transformer)
Description copied from interface: `LoadTimeWeaver`
Add a `ClassFileTransformer` to be applied by this `LoadTimeWeaver`.

Specified by:
  `addTransformer` in interface `LoadTimeWeaver`
Parameters:
  `transformer` - the `ClassFileTransformer` to add

### getInstrumentableClassLoader

public ClassLoader getInstrumentableClassLoader()
We have the ability to weave the current class loader when starting the JVM in this way, so the instrumentable class loader will always be the current loader.

Specified by:
  `getInstrumentableClassLoader` in interface `LoadTimeWeaver`
Returns:
  the `ClassLoader` which will expose instrumented classes according to the registered transformers

### getThrowawayClassLoader

public ClassLoader getThrowawayClassLoader()
This implementation always returns a `SimpleThrowawayClassLoader`.

Specified by:
  `getThrowawayClassLoader` in interface `LoadTimeWeaver`
Returns:
  a temporary throwaway `ClassLoader`; should return a new instance for each call, with no existing state

### removeTransformers

public void removeTransformers()
Remove all registered transformers, in inverse order of registration.

### isInstrumentationAvailable

public static boolean isInstrumentationAvailable()
Check whether an Instrumentation instance is available for the current VM.

See Also:
  - `getInstrumentation()`