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 Details

    • WeavingTransformer

      public WeavingTransformer(@Nullable ClassLoader classLoader)
      Create a new WeavingTransformer for the given class loader.
      Parameters:
      classLoader - the ClassLoader to build a transformer for
  • Method Details

    • 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, @Nullable 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