@Target([AnnotationTarget.CLASS, AnnotationTarget.FILE]) @Import(LoadTimeWeavingConfiguration) class EnableLoadTimeWeaving
Activates a Spring LoadTimeWeaver 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 @org.springframework.context.annotation.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 LoadTimeWeaverAware interface Any bean that implements the interface will then receive the LoadTimeWeaver reference automatically; for example, Spring's JPA bootstrap support. Customizing the LoadTimeWeaver The default weaver is determined automatically: see DefaultContextLoadTimeWeaver.
To customize the weaver used, the @Configuration class annotated with @EnableLoadTimeWeaving may also implement the LoadTimeWeavingConfigurer interface and return a custom LoadTimeWeaver 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.
#aspectjWeaving() attribute, which will cause the to be registered through LoadTimeWeaver#addTransformer. 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 when aspectj-weaving is "on". This does not occur when using @EnableLoadTimeWeaving(aspectjWeaving=ENABLED). Instead you must explicitly add @EnableSpringConfigured (included in the spring-aspects module)
Author
Chris Beams
Since
3.1
See Also
LoadTimeWeaverDefaultContextLoadTimeWeaverorg.aspectj.weaver.loadtime.ClassPreProcessorAgentAdapter
EnableLoadTimeWeaving(aspectjWeaving: AspectJWeaving)
Activates a Spring LoadTimeWeaver for this application context, available as a bean with the name "loadTimeWeaver", similar to the To be used on @org.springframework.context.annotation.Configuration classes; the simplest possible example of which follows: The example above is equivalent to the following Spring XML configuration: The LoadTimeWeaverAware interface Any bean that implements the interface will then receive the LoadTimeWeaver reference automatically; for example, Spring's JPA bootstrap support. Customizing the LoadTimeWeaver The default weaver is determined automatically: see DefaultContextLoadTimeWeaver.
To customize the weaver used, the
The example above can be compared to the following Spring XML configuration:
The code example differs from the XML example in that it actually instantiates the #aspectjWeaving() attribute, which will cause the to be registered through LoadTimeWeaver#addTransformer. AspectJ weaving will be activated by default if a "META-INF/aop.xml" resource is present on the classpath. Example:
The example above can be compared to the following Spring XML configuration:
The two examples are equivalent with one significant exception: in the XML case, the functionality of |
val aspectjWeaving: AspectJWeaving
Whether AspectJ weaving should be enabled. |