Spring-AOP
面向切面编程(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》