org.springframework.context.weaving
Class DefaultContextLoadTimeWeaver

java.lang.Object
  extended by org.springframework.context.weaving.DefaultContextLoadTimeWeaver
All Implemented Interfaces:
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 <context:load-time-weaver> XML tag.

This class implements a runtime environment check for obtaining the appropriate weaver implementation: As of Spring 3.0, it detects Oracle WebLogic 10, Oracle OC4J 10, GlassFish 3, JBoss AS 5 and 6, 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
See Also:
ConfigurableApplicationContext.LOAD_TIME_WEAVER_BEAN_NAME

Field Summary
protected  Log logger
           
 
Constructor Summary
DefaultContextLoadTimeWeaver()
           
 
Method Summary
 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()
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