面向切面编程(AOP)

1.横切关注点

在软件开发中,把散布在应用各处的功能称为横切关注点,比如日志、安全。
通常横切关注点是与我们的业务逻辑相互嵌套的,而AOP就是为了将横切关注点和业务逻辑分离。

2.切面

横切关注点可以模块化为特殊的类,这些类称为切面,它是通知和切点的结合。如下图所示:

切面取代了继承和委托,使用AOP,我们仍然在一个地方定义通用功能,但是可以通过声明的方式定义这个功能以何种方式在何处应用,而不修改受影响的类。

3.通知

在AOP术语中,切面的工作被称为通知,它定义了切面是什么以及何时使用。Spring切面定义了五种通知:

  • Before:在目标方法调用前执行通知
  • After:在目标方法调用后执行通知
  • After-returning:在目标方法成功执行后执行通知
  • After-throwing:在目标方法抛出异常时执行通知
  • Around:在目标方法调用前和调用后执行通知

4.连接点

连接点是应用执行过程中能够插入切面的一个点,其可能是调用方法时、抛出异常时、甚至修改一个字段时。

5.切点

切点定义了切面所通知的连接点的范围,即在何处应用切面。

6.织入

织入是把切面应用到目标对象并创建新的代理对象的过程。

7.动态代理

Spring AOP是在运行期将切面织入到Spring管理的bean中的,即Spring是基于动态代理的。
代理类包裹了切面,封装了目标类,并会拦截对目标类的方法调用。当代理拦截到方法调用时,先执行切面逻辑,之后把调用转发给真正的目标bean。

在xml中声明切面

Spring的AOP配置元素能够以非侵入性的方式声明切面。
大多数的AOP配置元素必须 在<aop:config>元素的上下文内使用。使用<aop:aspect>元素中的ref属性可以声明一个简单的切面。部分配置元素如下:

  • <aop:after>
  • <aop:before>
  • <aop:around>
  • <aop:after-returning>
  • <aop:after-throwing>
  • <aop:aspect>定义一个切面
  • <aop:pointcut>定义一个切点

参考书籍

《Spring In Action》

版权声明:本文为pycrab原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/pycrab/p/9774848.html