org.springframework.instrument.classloading

## Class WeavingTransformer

- java.lang.Object
- - org.springframework.instrument.classloading.WeavingTransformer

-     public class WeavingTransformer
      extends Object

  ClassFileTransformer-based weaver, allowing for a list of transformers to be applied on a class byte array. Normally used inside class loaders.

  Note: This class is deliberately implemented for minimal external dependencies, since it is included in weaver jars (to be deployed into application servers).

  Since:
    2.0
  Author:
    Rod Johnson, Costin Leau, Juergen Hoeller

- - ### Constructor Summary

    Constructors
    Constructor and Description
    `WeavingTransformer(ClassLoader classLoader)` Create a new WeavingTransformer for the given class loader.

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `void` | `addTransformer(ClassFileTransformer transformer)` Add a class file transformer to be applied by this weaver.
    `byte[]` | `transformIfNecessary(String className, byte[] bytes)` Apply transformation on a given class byte definition.
    `byte[]` | `transformIfNecessary(String className, String internalName, byte[] bytes, ProtectionDomain pd)` Apply transformation on a given class byte definition.

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

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

- - ### Constructor Detail

    - #### WeavingTransformer

          public WeavingTransformer(ClassLoader classLoader)

      Create a new WeavingTransformer for the given class loader.
      Parameters:
        `classLoader` - the ClassLoader to build a transformer for

  - ### Method Detail

    - #### addTransformer

          public void addTransformer(ClassFileTransformer transformer)

      Add a class file transformer to be applied by this weaver.
      Parameters:
        `transformer` - the class file transformer to register

    - #### transformIfNecessary

          public byte[] transformIfNecessary(String className,
                                    byte[] bytes)

      Apply transformation on a given class byte definition. The method will always return a non-null byte array (if no transformation has taken place the array content will be identical to the original one).
      Parameters:
        `className` - the full qualified name of the class in dot format (i.e. some.package.SomeClass)
        `bytes` - class byte definition
      Returns:
        (possibly transformed) class byte definition

    - #### transformIfNecessary

          public byte[] transformIfNecessary(String className,
                                    String internalName,
                                    byte[] bytes,
                                    ProtectionDomain pd)

      Apply transformation on a given class byte definition. The method will always return a non-null byte array (if no transformation has taken place the array content will be identical to the original one).
      Parameters:
        `className` - the full qualified name of the class in dot format (i.e. some.package.SomeClass)
        `internalName` - class name internal name in / format (i.e. some/package/SomeClass)
        `bytes` - class byte definition
        `pd` - protection domain to be used (can be null)
      Returns:
        (possibly transformed) class byte definition