在使用Aop功能时要添加注解@EnableAspectJAutoProxy,所以这个注解就是Aop的入口了。这个注解的作用就是在Spring的后置处理器中添加一个处理器来处理springBean,使之成为一个代理对象。
1 @Target({ElementType.TYPE}) 2 @Retention(RetentionPolicy.RUNTIME) 3 @Documented 4 @Import({AspectJAutoProxyRegistrar.class}) 5 public @interface EnableAspectJAutoProxy { 6 boolean proxyTargetClass() default false; 7 8 boolean exposeProxy() default false; 9 }
通过@Import注解进入AspectJAutoProxyRegistrar类中,这个类动态加载了spring的后置处理器
1 class AspectJAutoProxyRegistrar implements ImportBeanDefinitionRegistrar { 2 AspectJAutoProxyRegistrar() { 3 } 4 5 public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) { 6 AopConfigUtils.registerAspectJAnnotationAutoProxyCreatorIfNecessary(registry); 7 AnnotationAttributes enableAspectJAutoProxy = AnnotationConfigUtils.attributesFor(importingClassMetadata, EnableAspectJAutoProxy.class); 8 if (enableAspectJAutoProxy != null) { 9 if (enableAspectJAutoProxy.getBoolean("proxyTargetClass")) { 10 AopConfigUtils.forceAutoProxyCreatorToUseClassProxying(registry); 11 } 12 13 if (enableAspectJAutoProxy.getBoolean("exposeProxy")) { 14 AopConfigUtils.forceAutoProxyCreatorToExposeProxy(registry); 15 } 16 } 17 18 } 19 }