【源码】Spring AOP 1 基础概念

前言

用过 Spring,就一定用过 Spring AOP。本着知其所以然的态度,对 Spring AOP 的源码进行解读。从整个类的抽象,对部分源码的深入,结合 类图序列图 的分析,旨在了解 Spring AOP 的真正原理,在使用切面编程的时候更加得心应手、事半功倍。万丈高楼平地起,先温习一下相关基础概念

基础概念

AOP

Aspect-oriented Programming(面向切面编程),允许我们动态地非入侵地修改类地行为

Aspect

切面Aspect 之于 AOP 好比 ClassOOP (面向对象编程)。“切入”我们指定的方法执行相应的逻辑(注意此处的切入并非代码的入侵),比如 Spring 事务的实现。在 Spring AOPAspect 通常是一个普通的类,由 XML 或者注解声明为一个切面

Join point

官方定义,程序在运行期间的一个“点”,比如方法的执行异常的处理。个人理解,如果把 AOP 理解成谁在哪里干了什么?那么 Join point 就是这个地点的抽象。

Advice

通知,在 Join point 的逻辑处理。比如在方法前(before)、后(after)进行切入。通常,在 AOP 框架中,通知会被维护成 Join point 的一串拦截链(interceptors chain

Pointcut

通常称为切点,对 Join point 的匹配描述,比如 execution 表达式。 Pointcut 告诉 AspectAdvice 应该去对应的 Join point 执行。在 Spring AOP 中,我们对 Pointcut 的解析沿用了 AspectJ 的规范。

通知类型

此处开始我们站在 Spring AOP 的角度,所有 Join point 将被认为是一个“方法

Before advice

在方法之前执行的通知,它不能打断方法的执行,除非执行过程中抛出了异常。

After returning advice

在方法成功执行完成后(没有抛出异常)执行的通知

After throwing advice

方法抛出异常后执行的通知

After (finally) advice

无论方法是否正常结束,都将被执行的通知(可以理解为在 finally 块里执行的通知)

Around advice

最强大的通知,它不仅可以在方法的前后执行通知,还可以打断方法的执行,或者返回一些自定义的结果,甚至抛出异常。

总结

基本的概念已经了解。想要“强壮”、“优雅”的完成这样一个功能,抽象的功夫必然要做好。Spring 整个框架就是“抽象”的教科书,接下来我们会划分较多的章节,来一个个解析 aopalliance(AOP联盟)和Spring 对整个 AOP 的抽象,并对中间必要的细节结合源码进行解读。最后梳理 Spring AOP 是如何实现的,以至于到了我们用户层,仅仅需要注解式的( XML 等方式)声明,就能优雅的使用~

下一篇:【源码】Spring AOP 2 Advice

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值