AOP的介绍
AOP 是 OOP 的延续,是 Aspect Oriented Programming 的缩写,即面向切面编程。可以通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种技术。
AOP设计模式追求的是调用者和被调用者之间的解耦,AOP 可以说也是这种目标的一种实现,如:日志、事务、安全等。这些属于非业务代码,往往具有大量的重复性,且不易维护。AOP 就实现了把这些业务需求与系统需求分开来做。这种解决的方式也称代理机制。
AOP的几个重要概念
1. 切面(Aspect)
被抽取出来的公共模块,可以用来会横切多个对象。Aspect切面可以看成Pointcut切点和Advice通知的结合,一个切面可以由多个切点和通知组成。
2. 连接点(Join point)
指程序运行过程中所执行的方法。在Spring AOP中,一个连接点总代表一个方法的执行。
3. 切点(Pointcut)
切点用于定义要对哪些连接点(Join point)进行拦截。
4. 通知(Advice)
指要在连接点(Join Point)上执行的动作,即增强的逻辑。比如权限校验和、日志记录,事务控制等。通知有各种类型,包括Around、Before、After、After returning、After throwing。
5. 目标对象(Target)
包含连接点的对象,也称作被通知(Advice)的对象。 由于Spring AOP是通过动态代理实现的,所以这个对象永远是一个被代理对象。
6. 织入(Weaving)
通过动态代理,在目标对象(Target)的方法(即连接点Join point)中执行增强逻辑(Advice)的过程。
7. 引入(Introduction)
添加额外的方法或者字段到被通知的类。Spring允许引入新的接口(以及对应的实现)到任何被代理的对象。例如,你可以使用一个引入来使bean实现 IsModified 接口,以便简化缓存机制。
通知(Advice)类型
1. 前置通知(Before Advice)
在某连接点(JoinPoint)之前执行的通知,但这个通知不能阻止连接点前的执行。
2. 后置通知(After Advice)
当某连接点退出的时候执行的通知(不论是正常返回还是异常退出)。
3. 返回后通知(After Return Advice)
在某连接点正常完成后执行的通知,不包括抛出异常的情况。
4. 环绕通知(Around Advice)
包围一个连接点的通知,类似 Web 中 Servlet 规范中的 Filter 的 doFilter 方法。可以在方法的调用前后完成自定义的行为,也可以选择不执行。
5. 异常通知(After Throwing Advice)
在 方 法 抛 出 异 常 退 出 时 执 行 的 通 知 。
注:可以将多个通知应用到一个目标对象上,即可以将多个切面织入到同一目标对象。使用 Spring AOP 可以基于两种方式,一种注解方式,另一种xml配置方式。