Annotation Type EnableAspectJAutoProxy
@Target(TYPE) @Retention(RUNTIME) @Documented @Import(org.springframework.context.annotation.AspectJAutoProxyRegistrar.class) public @interface EnableAspectJAutoProxy
Enables support for handling components marked with AspectJ's@Aspectannotation, similar to functionality found in Spring's<aop:aspectj-autoproxy>XML element. To be used on @Configurationclasses as follows:@Configuration @EnableAspectJAutoProxy public class AppConfig { @Bean public FooService fooService() { return new FooService(); } @Bean public MyAspect myAspect() { return new MyAspect(); } }WhereFooServiceis a typical POJO component andMyAspectis an@Aspect-style aspect:public class FooService { // various methods }@Aspect public class MyAspect { @Before("execution(* FooService+.*(..))") public void advice() { // advise FooService methods as appropriate } }In the scenario above,@EnableAspectJAutoProxyensures thatMyAspectwill be properly processed and thatFooServicewill be proxied mixing in the advice that it contributes.Users can control the type of proxy that gets created for
FooServiceusing theproxyTargetClass()attribute. The following enables CGLIB-style 'subclass' proxies as opposed to the default interface-based JDK proxy approach.@Configuration @EnableAspectJAutoProxy(proxyTargetClass=true) public class AppConfig { // ... }Note that
@Aspectbeans may be component-scanned like any other. Simply mark the aspect with both@Aspectand@Component:package com.foo; @Component public class FooService { ... } @Aspect @Component public class MyAspect { ... }Then use the @ComponentScanannotation to pick both up:@Configuration @ComponentScan("com.foo") @EnableAspectJAutoProxy public class AppConfig { // no explicit @Bean definitions required }Note:@EnableAspectJAutoProxyapplies to its local application context only, allowing for selective proxying of beans at different levels. Please redeclare@EnableAspectJAutoProxyin each individual context, e.g. the common root web application context and any separateDispatcherServletapplication contexts, if you need to apply its behavior at multiple levels.This feature requires the presence of
aspectjweaveron the classpath. While that dependency is optional forspring-aopin general, it is required for@EnableAspectJAutoProxyand its underlying facilities.- Since:
- 3.1
- Author:
- Chris Beams, Juergen Hoeller
- See Also:
Aspect
Optional Element Summary
Optional Elements Modifier and Type Optional Element Description booleanexposeProxyIndicate that the proxy should be exposed by the AOP framework as aThreadLocalfor retrieval via theAopContextclass.booleanproxyTargetClassIndicate whether subclass-based (CGLIB) proxies are to be created as opposed to standard Java interface-based proxies.
Element Detail
proxyTargetClass
boolean proxyTargetClass
Indicate whether subclass-based (CGLIB) proxies are to be created as opposed to standard Java interface-based proxies. The default isfalse.- Default:
- false
exposeProxy
boolean exposeProxy
Indicate that the proxy should be exposed by the AOP framework as aThreadLocalfor retrieval via theAopContextclass. Off by default, i.e. no guarantees thatAopContextaccess will work.- Since:
- 4.3.1
- Default:
- false