@Target(value=TYPE) @Retention(value=RUNTIME) @Documented @Import(value=LoadTimeWeavingConfiguration.class) public @interface EnableLoadTimeWeaving
LoadTimeWeaver
for this application context, available asa 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 LoadTimeWeaverAware
interface
Any bean that implements the
LoadTimeWeaverAware
interfacewill 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 theMyLoadTimeWeaver
type, meaning that it can also configure the instance, e.g.calling the #addClassTransformer
method. This demonstrates how the code-basedconfiguration 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 tobe registered through
LoadTimeWeaver.addTransformer(java.lang.instrument.ClassFileTransformer)
. AspectJ weaving will beactivated 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 the spring-aspects
module)
- Since:
- 3.1
- Author:
- Chris Beams