org.springframework.context.weaving

## Class DefaultContextLoadTimeWeaver

- java.lang.Object
- - org.springframework.context.weaving.DefaultContextLoadTimeWeaver

- All Implemented Interfaces:
    Aware, BeanClassLoaderAware, DisposableBean, LoadTimeWeaver

      public class DefaultContextLoadTimeWeaver
      extends Object
      implements LoadTimeWeaver, BeanClassLoaderAware, DisposableBean

  Default `LoadTimeWeaver` bean for use in an application context, decorating an automatically detected internal `LoadTimeWeaver`.

  Typically registered for the default bean name "`loadTimeWeaver`"; the most convenient way to achieve this is Spring's `&lt;context:load-time-weaver&gt;` XML tag.

  This class implements a runtime environment check for obtaining the appropriate weaver implementation: As of Spring 3.1, it detects Oracle WebLogic 10, Oracle OC4J 10, GlassFish 3, JBoss AS 5, 6 and 7, IBM WebSphere 7 and 8, `Spring's VM agent` and any `ClassLoader` supported by Spring's `ReflectiveLoadTimeWeaver` (for example the `TomcatInstrumentableClassLoader` for Tomcat 5, 6 and 7).

  Since:
    2.5
  Author:
    Juergen Hoeller, Ramnivas Laddad, Costin Leau
  See Also:
    `ConfigurableApplicationContext.LOAD_TIME_WEAVER_BEAN_NAME`

- - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `protected Log` | `logger`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `DefaultContextLoadTimeWeaver()`
    `DefaultContextLoadTimeWeaver(ClassLoader beanClassLoader)`

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `void` | `addTransformer(ClassFileTransformer transformer)` Add a `ClassFileTransformer` to be applied by this `LoadTimeWeaver`.
    `protected LoadTimeWeaver` | `createServerSpecificLoadTimeWeaver(ClassLoader classLoader)`
    `void` | `destroy()` Invoked by a BeanFactory on destruction of a singleton.
    `ClassLoader` | `getInstrumentableClassLoader()` Return a `ClassLoader` that supports instrumentation through AspectJ-style load-time weaving based on user-defined `ClassFileTransformers`.
    `ClassLoader` | `getThrowawayClassLoader()` Return a throwaway `ClassLoader`, enabling classes to be loaded and inspected without affecting the parent `ClassLoader`.
    `void` | `setBeanClassLoader(ClassLoader classLoader)` Callback that supplies the bean `class loader` to a bean instance.

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

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

- - ### Field Detail

    - #### logger

          protected final Log logger

  - ### Constructor Detail

    - #### DefaultContextLoadTimeWeaver

          public DefaultContextLoadTimeWeaver()

    - #### DefaultContextLoadTimeWeaver

          public DefaultContextLoadTimeWeaver(ClassLoader beanClassLoader)

  - ### Method Detail

    - #### setBeanClassLoader

          public void setBeanClassLoader(ClassLoader classLoader)

      Description copied from interface: `BeanClassLoaderAware`
      Callback that supplies the bean `class loader` to a bean instance.

      Invoked after the population of normal bean properties but before an initialization callback such as `InitializingBean's` `InitializingBean.afterPropertiesSet()` method or a custom init-method.

      Specified by:
        `setBeanClassLoader` in interface `BeanClassLoaderAware`
      Parameters:
        `classLoader` - the owning class loader; may be `null` in which case a default `ClassLoader` must be used, for example the `ClassLoader` obtained via `ClassUtils.getDefaultClassLoader()`

    - #### createServerSpecificLoadTimeWeaver

          protected LoadTimeWeaver createServerSpecificLoadTimeWeaver(ClassLoader classLoader)

    - #### destroy

          public void destroy()

      Description copied from interface: `DisposableBean`
      Invoked by a BeanFactory on destruction of a singleton.
      Specified by:
        `destroy` in interface `DisposableBean`

    - #### 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()

      Description copied from interface: `LoadTimeWeaver`
      Return a `ClassLoader` that supports instrumentation through AspectJ-style load-time weaving based on user-defined `ClassFileTransformers`.

      May be the current `ClassLoader`, or a `ClassLoader` created by this `LoadTimeWeaver` instance.

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

    - #### getThrowawayClassLoader

          public ClassLoader getThrowawayClassLoader()

      Description copied from interface: `LoadTimeWeaver`
      Return a throwaway `ClassLoader`, enabling classes to be loaded and inspected without affecting the parent `ClassLoader`.

      Should not return the same instance of the `ClassLoader` returned from an invocation of `LoadTimeWeaver.getInstrumentableClassLoader()`.

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