org.springframework.context.weaving
public class: DefaultContextLoadTimeWeaver [javadoc |
source]
java.lang.Object
org.springframework.context.weaving.DefaultContextLoadTimeWeaver
All Implemented Interfaces:
BeanClassLoaderAware, DisposableBean, LoadTimeWeaver
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 2.5, it detects Sun's
GlassFish, Oracle's OC4J, BEA's WebLogic 10,
Spring's VM agent and any
ClassLoader supported by Spring's ReflectiveLoadTimeWeaver
(for example the
org.springframework.instrument.classloading.tomcat.TomcatInstrumentableClassLoader ).
Also see:
- org.springframework.context.ConfigurableApplicationContext#LOAD_TIME_WEAVER_BEAN_NAME
- author:
Juergen - Hoeller
- author:
Ramnivas - Laddad
- since:
2.5 -
| Field Summary |
|---|
| protected final Log | logger | |
| Method from org.springframework.context.weaving.DefaultContextLoadTimeWeaver Detail: |
public void addTransformer(ClassFileTransformer transformer) {
this.loadTimeWeaver.addTransformer(transformer);
}
|
protected LoadTimeWeaver createServerSpecificLoadTimeWeaver(ClassLoader classLoader) {
try {
if (classLoader.getClass().getName().startsWith("weblogic")) {
return new WebLogicLoadTimeWeaver(classLoader);
}
else if (classLoader.getClass().getName().startsWith("oracle")) {
return new OC4JLoadTimeWeaver(classLoader);
}
else if (classLoader.getClass().getName().startsWith("com.sun.enterprise")) {
return new GlassFishLoadTimeWeaver(classLoader);
}
}
catch (IllegalStateException ex) {
logger.info("Could not obtain server-specific LoadTimeWeaver: " + ex.getMessage());
}
return null;
}
|
public void destroy() {
if (this.loadTimeWeaver instanceof InstrumentationLoadTimeWeaver) {
logger.info("Removing all registered transformers for class loader: " +
this.loadTimeWeaver.getInstrumentableClassLoader().getClass().getName());
((InstrumentationLoadTimeWeaver) this.loadTimeWeaver).removeTransformers();
}
}
|
public ClassLoader getInstrumentableClassLoader() {
return this.loadTimeWeaver.getInstrumentableClassLoader();
}
|
public ClassLoader getThrowawayClassLoader() {
return this.loadTimeWeaver.getThrowawayClassLoader();
}
|
public void setBeanClassLoader(ClassLoader classLoader) {
LoadTimeWeaver serverSpecificLoadTimeWeaver = createServerSpecificLoadTimeWeaver(classLoader);
if (serverSpecificLoadTimeWeaver != null) {
if (logger.isInfoEnabled()) {
logger.info("Determined server-specific load-time weaver: " +
serverSpecificLoadTimeWeaver.getClass().getName());
}
this.loadTimeWeaver = serverSpecificLoadTimeWeaver;
}
else if (InstrumentationLoadTimeWeaver.isInstrumentationAvailable()) {
logger.info("Found Spring's JVM agent for instrumentation");
this.loadTimeWeaver = new InstrumentationLoadTimeWeaver(classLoader);
}
else {
try {
this.loadTimeWeaver = new ReflectiveLoadTimeWeaver(classLoader);
logger.info("Using a reflective load-time weaver for class loader: " +
this.loadTimeWeaver.getInstrumentableClassLoader().getClass().getName());
}
catch (IllegalStateException ex) {
throw new IllegalStateException(ex.getMessage() + " Specify a custom LoadTimeWeaver " +
"or start your Java virtual machine with Spring's agent: -javaagent:spring-agent.jar");
}
}
}
|