How to program based on AOP in Spring Framework

Overview

Basic concepts

  • Join point

连接点是程序执行过程中某个特定的执行点。这个执行点所进行的对某个方法的调用或是对某个异常的处理。在Spring Framework中连接点就是指对某个程序的调用点。

  • Point cut

切入点是匹配连接点的一种结构。切入点表达式与连接点的匹配是实现AOP的技术核心。

  • Advice

通知,是指在某个切入点所执行的代码。它应该和某个切入点表达式相连,并在满足切入点的连接点上运行。通知具有多种类型,其中包括around、before和after等类型。

  • Aspect

切面,是指对关注点的模块化处理,也就是切入点和通知的结合体,它类似于OOP中定义的一个类,但是它更多代表的是对象间横向的关系。

  • Introduction

引入,是指为对象增加额外的方法或者属性,从而达到修改对象内部结构的目的。Spring Framework允许引入新的接口(以及对应的实现)到任何被代理的对象。

  • Target Object

目标对象,是指被一个或者多个切面通知的对象,也可以称做被通知对象。因为Spring AOP是在运行时实现代理的,因而这个对象永远是一个被代理对象。

  • AOP Proxy

AOP代理,是由AOP框架创建的代码对象,用来实现切面契约(aspect contract)(包括通知方法执行等)。在Spring Framework中,AOP代理可以是JDK动态代理或CGLIB代码。

  • Weaving

织入,是指将切面(Aspect)连接到其他应用程序类型或者对象上,并创建一个被通知(Advised)的对象。织入工作可以在编译时(例如使用AspectJ编译器)、类加载时或者运行时完成。Spring和其他纯Java AOP框架一样,是在运行时完成织入工作的。

Features of Spring AOP

Spring AOP是采用纯Java实现的,因此它不需要使用任何特殊的编译器来编译Java对象,也不需要通过控制类装载器来实现对被装载对象的修改。因此,它具有广泛的适用性,可以很方便的应用于各种系统中。

Spring Framework目前仅支持使用方法调用作为连接点,在Srping Bean上通知方法的执行。虽然可以在不影响到Spring AOP核心API的情况下加入对成员变量拦截器的支持。但是Spring并没有实现成员变量拦截器。如果需要把对象成员的访问和更新也作为通知的连接点,可以考虑其他语法的Java语言,如AspectJ。

Spring AOP对通知类型提供了广泛的支持。它所支持的智能类型包括:

  • Before advice

前置通知是指在某个连接点方法之前执行的通知。如果这个通知不抛出异常,那么该连接点就一定会被执行。

  • After returning advice

返回后通知是指在某个连接点方法正常完成(没有抛出异常)后执行的通知。

  • After throwing advice

抛出异常通知是指在连接点抛出异常退出时执行通知。

  • After finally advice

后置智能是指无论是在任何情况下连接点方法退出时执行的通知,也就是说无论连接点方法正常退出还是抛出异常退出都会执行此通知。

  • Around advice

环绕通知是指包围连接点方法的通知。这种通知的功能非常强大,可以替代前面任何一种通知的功能。

Spring AOP通常都是和Spring IOC容器一起使用的,因而Spring AOP在 实现上更侧重于实现和Spring IOC容器的整合。这也是Spring AOP和其他AOP实现的一个显著区别。

因此,有些事情使用Spring AOP是无法轻松或者高效完成的,例如通知一个细粒度的对象。在这种情况下,使用AspectJ是最好的选择。

Spring默认使用Java SE中的动态代理来作为AOP的代理。这样任何接口都可以被代理。另外,Spring也支持CGLIB代理。

AOP-based configuration

AOP based on @AspectJ

参考文献

  • Struts,Hibernate,Spring集成开发宝典 /陈天河等编著;——北京:电子工业出版社,2007.1;ISBN 7-121-03399-2
  • Spring实战:第4版 /(美)沃尔斯(Walls,C.)著;张卫滨译。——北京:人民邮件出版社,2016.4 ISBN 978-7-115-41730-5
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qwfys200

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值