Annotation Type EnableLoadTimeWeaving
@Target(TYPE) @Retention(RUNTIME) @Documented @Import(LoadTimeWeavingConfiguration.class) public @interface EnableLoadTimeWeaving
Activates a SpringLoadTimeWeaver
for this application context, available as a bean with the name "loadTimeWeaver", similar to the<context:load-time-weaver>
element in Spring XML.To be used on @
Configuration
classes; the simplest possible example of which follows:@Configuration @EnableLoadTimeWeaving public class AppConfig { // application-specific @Bean definitions ... }
The example above is equivalent to the following Spring XML configuration:<beans> <context:load-time-weaver/> <!-- application-specific <bean> definitions --> </beans>
The
Any bean that implements theLoadTimeWeaverAware
interfaceLoadTimeWeaverAware
interface will then receive theLoadTimeWeaver
reference automatically; for example, Spring's JPA bootstrap support.Customizing the
The default weaver is determined automatically: seeLoadTimeWeaver
DefaultContextLoadTimeWeaver
.To customize the weaver used, the
@Configuration
class annotated with@EnableLoadTimeWeaving
may also implement theLoadTimeWeavingConfigurer
interface and return a customLoadTimeWeaver
instance through the#getLoadTimeWeaver
method:@Configuration @EnableLoadTimeWeaving public class AppConfig implements LoadTimeWeavingConfigurer { @Override public LoadTimeWeaver getLoadTimeWeaver() { MyLoadTimeWeaver ltw = new MyLoadTimeWeaver(); ltw.addClassTransformer(myClassFileTransformer); // ... return ltw; } }
The example above can be compared to the following Spring XML configuration:
<beans> <context:load-time-weaver weaverClass="com.acme.MyLoadTimeWeaver"/> </beans>
The code example differs from the XML example in that it actually instantiates the
MyLoadTimeWeaver
type, meaning that it can also configure the instance, e.g. calling the#addClassTransformer
method. This demonstrates how the code-based configuration approach is more flexible through direct programmatic access.Enabling AspectJ-based weaving
AspectJ load-time weaving may be enabled with theaspectjWeaving()
attribute, which will cause the AspectJ class transformer to be registered throughLoadTimeWeaver.addTransformer(java.lang.instrument.ClassFileTransformer)
. AspectJ weaving will be activated by default if a "META-INF/aop.xml" resource is present on the classpath. Example:@Configuration @EnableLoadTimeWeaving(aspectjWeaving=ENABLED) public class AppConfig { }
The example above can be compared to the following Spring XML configuration:
<beans> <context:load-time-weaver aspectj-weaving="on"/> </beans>
The two examples are equivalent with one significant exception: in the XML case, the functionality of
<context:spring-configured>
is implicitly enabled whenaspectj-weaving
is "on". This does not occur when using@EnableLoadTimeWeaving(aspectjWeaving=ENABLED)
. Instead you must explicitly add@EnableSpringConfigured
(included in thespring-aspects
module)- Since:
- 3.1
- Author:
- Chris Beams
- See Also:
LoadTimeWeaver
,DefaultContextLoadTimeWeaver
,ClassPreProcessorAgentAdapter
Optional Element Summary
Optional Elements Modifier and Type Optional Element Description EnableLoadTimeWeaving.AspectJWeaving
aspectjWeaving
Whether AspectJ weaving should be enabled.
Element Detail
aspectjWeaving
EnableLoadTimeWeaving.AspectJWeaving aspectjWeaving
Whether AspectJ weaving should be enabled.- Default:
- org.springframework.context.annotation.EnableLoadTimeWeaving.AspectJWeaving.AUTODETECT