学习了Java基础后就应该知道了aop的概念,面向切面编程。
基础概念
Joinpoint:连接点,所谓连接点是指那些可以被拦截到的点。在spring中,这些点指的是方法,因为 spring 只支持方法类型的连接点。不过他再spring中没有配置的必要,pointcut才有配置的价值。
Pointcut:切入点,所谓切入点是指我们要对哪些 Joinpoint 进行拦截的定义,必不可少的配置信息。
Advice:通知/增强,所谓通知是指拦截到 Joinpoint 之后所要做的事情就是通知,通知分为五种:前置通知,后置通知,异常通知,最终通知,环绕通知(切面要完成的功能)
Introduction(引介):引介是一种特殊的通知在不修改类代码的前提下, Introduction 可以在运行期为类动态地添加一些方法或Field. Target(目标对象):代理的目标对象
Weaving:织入,是指把增强应用到目标对象来创建新的代理对象的过程.spring采用动态代理织入,而AspectJ 采用编译期织入和类装在期织入
Proxy:代理,一个类在被代理类生成之前,AOP 织入。
Aspect:切面, 是切入点和通知(引介)的结合。通知和切入点在这里汇合,实现切入操作。
配置实例:
通知类型
前置通知:before,属于织入方法执行前
环绕通知:around,方法执行前和执行后都有
异常通知:after-throwing,抛异常时执行,属于执行后的
返回通知:after-returning,返回时执行,属于执行后的
后置通知:after,执行后的
上面的顺序按照order顺序排列,order越小,属于执行前的执行越早,属于执行后的执行越晚。建议使用时要不使用环绕通知,要不只使用前置和后置通知,定义好order顺序,不然容易导致顺序出错,也不建议将关键步骤放在这些地方,建议使用记录log之类的功能。