Spring源码学习之Aop源码分析

  在使用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 }
原文地址:https://www.cnblogs.com/wk-missQ1/p/12639892.html