1、切面(Aspect)
切面就是在一个怎样的环境中工作。它可以定义后面需要介绍的各类通知、切点和引入等内容,然后SpringAOP会将其定义的内容织入到约定的流程中,在动态代理中可以把它理解成一个拦截器。
2、通知(Advice)
通知是切面开启后,切面的方法。他根据在代理对象真实方法调用前、后的顺序和逻辑区分。
- 前置通知(before):在动态代理反射原有对象方法或者执行环绕通知前执行的通知功能。
- 后置通知(after):在动态代理反射原有对象方法或者执行环绕通知后执行的通知功能。无论是否抛出异常,他都会被执行。
- 返回通知(afterReturning):在动态代理反射原有对象方法或者执行环绕通知后正常返回(无异常)执行的通知功能。
- 异常通知(afterThrowing):在动态代理反射原有对象方法或者执行环绕通知产生异常后执行的通知功能。
- 环绕通知(around):在动态代理中,他可以取代当前被拦截对象的方法,提供回调原有被拦截对象的方法。
3、引入(introduction)
引入允许我们在现有的类里添加自定义的类和方法。
4、切点(Pointcut)
这是一个告诉Spring AOP在什么时候启动拦截并织入对应的流程中,因为并不是所有的开发都需要启动AOP的,他往往通过正则表达式进行限定。
5、连接点(join point)
连接点对应的是具体需要拦截的东西,比如通过切点的正则表达式去判断那些方法是连接点,从而织入对应的通知。
6、织入(Wearing)
织入是一个生成代理对象并将切面内容放入到流程中的过程。实际代理的方法分为静态代理和动态代理。静态代理是在编译class文件时生成的代码逻辑,但是在Spring中并不使用这样的方式,所以我们暂时不讨论。一种是通过ClassLoader也就是在类加载的时候生成的代码逻辑,但是它在应用程序代码运行之前就生成了对应的逻辑。还有一种是运行期,动态生成代码的方式,这是SpringAOP所采用的方式,Spring是以JDK和CGLIB动态代理来生成代理对象的。