@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 LoadTimeWeavingConfigurerinterface 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

本文介绍如何使用@EnableLoadTimeWeaving注解激活Spring Load-Time Weaving,为应用上下文提供一个名为loadTimeWeaver的LoadTimeWeaver Bean。文章对比了基于注解配置与XML配置的不同,并详细说明了如何通过实现LoadTimeWeavingConfigurer接口来自定义LoadTimeWeaver实例。
1066

被折叠的 条评论
为什么被折叠?



