@order注解_Spring AOP:AOP 注解的解析

前言

上文介绍了 AOP 的基本概念,本文开始进入 AOP 的源码解析,本文仍以 AspectJ 来进行介绍,首先是 AOP 注解的解析。

正文

当使用 <aop:aspectj-autoproxy /> 注解开启 AOP 功能时。

Spring会从“META-INF/spring.handlers” 配置文件中拿到该注解对应的 NamespaceHandlerSupport:AopNamespaceHandler

354a4b1b3bb5df183e8d8170ffbd2e96.png

在 AopNamespaceHandler 的 init 方法会给该注解注册对应的解析器,aspectj-autoproxy 对应的解析器是:AspectJAutoProxyBeanDefinitionParser。

@Override

我们知道,当解析到 <aop:aspectj-autoproxy /> 注解时,会调用 AspectJAutoProxyBeanDefinitionParser 的 parse方法。

关于自定义注解的解析内容之前 IoC 的文章介绍过了,如果不了解的可以参考:Spring IoC:parseCustomElement 详解

AspectJAutoProxyBeanDefinitionParser#parse

@Override

1.注册 AspectJAnnotationAutoProxyCreator,见代码块1。

代码块1:AopNamespaceUtils#registerAspectJAnnotationAutoProxyCreatorIfNecessary

public 

1.注册 AspectJAnnotationAutoProxyCreator,见代码块2。

2.对于 proxy-target-class 以及 expose-proxy 属性的处理,见代码块3。

代码块2:AopConfigUtils#registerAspectJAnnotationAutoProxyCreatorIfNecessary

public 

org.springframework.aop.config.internalAutoProxyCreator 是内部管理的自动代理创建者的 bean 名称,可能对应的 beanClassName 有三种,对应的注解如下:

  • InfrastructureAdvisorAutoProxyCreator:<tx:annotation-driven />
  • AspectJAwareAdvisorAutoProxyCreator:<aop:config />
  • AnnotationAwareAspectJAutoProxyCreator:<aop:aspectj-autoproxy />

当同时存在多个注解时,会使用优先级最高的 beanClassName 来作为 org.springframework.aop.config.internalAutoProxyCreator 的 beanClassName。本系列文章暂不考虑同时存在其他注解的情况,所以在这边会注册的 beanClassName 为:AnnotationAwareAspectJAutoProxyCreator。

代码块3:useClassProxyingIfNecessary

private 

总结

本文的内容比较简单,最重要的内容就是注册了内部管理的自动代理创建者的 bean:AnnotationAwareAspectJAutoProxyCreator,AOP 的大部分重要内容都在这个bean 里,之后会一一介绍。

推荐阅读

程序员囧辉:4 年 Java 经验面试总结、心得体会​zhuanlan.zhihu.com
2a59be00c5e42bc9e149fe661c3b93ff.png
程序员囧辉:Spring IoC:源码总览​zhuanlan.zhihu.com
d433e8fdae2902f3650b86a4fc0c4362.png
程序员囧辉:史上最详细的 JDK 1.8 HashMap 源码解析​zhuanlan.zhihu.com
cde5fb755d77541af5538cacd5331f22.png

http://weixin.qq.com/r/oT_EnKXEJ-hYreH-92qz (二维码自动识别)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值