AOP 并不是 Spring 框架的专属名称,它的全称是 Aspect Oriented Programming ,意为:面向切面编程。
它是 OOP(面向对象) 的一个延续,通过预编译的方式和运行期间动态代理实现程序功能的统一维护的一种技术。
切面编程指的是在程序运行某个方法的时候,不修改原始执行代码逻辑,由程序动态地执行某些额外的功能,对原有的方法做增强,这就叫做面向切面编程。
那个被监测的执行方法(也就是等待被增强的方法),称之为切入点。
Join point(连接点)
连接点是指那些被拦截到的点,在 Spring 中这些点指的是方法,可以看作正在访问的,或者等待访问的那些需要被增强功能的方法。
Spring只支持方法类型的连接点。
Pointcut(切入点)
切入点是一种规则,定义了我们要对哪些方法进行增强,因为一个项目中有许多的类和方法,而哪些方法需要使用AOP进行功能的增强,这个规则就需要我们制定。
Advice(通知)
所谓通知就是拦截到连接点(Join point)后要做的事情,也就是拦截到连接点后要执行的增强方法;这个过程就是通知。
通知方法对拦截到的连接点(也就是要被增强的方法)进行增强。
通知分类:
前置通知(before):在连接点运行之前执行的通知,这里的通知指的是对连接点增强的方法。后置通知(after-returning):在连接点运行完毕之后执行的通知。最终通知(after):无论连接点正常执行成功,还是出现异常都会执行的通知,类似于try…catch中的finally。异常通知(throwing):当连接点的执行出现异常,则执行此异常通知,类似于catch。环绕通知(around):环绕通知可以在方法调用之前和之后执行自定义行为。Target(目标)
Target 指的是代理的目标对象,也就是被代理类。
AOP 对连接点方法做增强,底层是代理模式生成连接点所在类的代理对象,那么连接点所在的类,就是被代理的类称呼为 Target。
Aspect(切面)
切面本质是一个类,只不过是个功能类,作为整合 AOP 的切入点和通知。需要在 Spring 的配置文件中配置,或者通过注解来配置。
切面指的就是拦截到连接点后,对连接点执行的增强方法所在的类,这个类就称为切面。
Weaving(织入)
织入是一种动作的描述,在程序运行时将增强的功能代码(也就是通知)所在的类,根据通知的类型,放到对应的位置,生成代理对象。
Proxy(代理)
一个类被 AOP 织入增强后,产生的结果就是代理类。
Spring的AOP就是再不修改源代码的情况下,通过配置文件,动态的对一些方法进行功能的增强(调用其它方法进行增强),增强的时机根据配置的通知类型来决定。