概念
A. Aspect(切面)
比如说事务、权限等,与业务逻辑没有关系的部分
B. joinpoint(连接点)
目标类的目标方法。(由客户端在调用的时候决定)
C. Pointcut(切入点)
所谓切入点是指我们要对那些拦截的方法的定义.
被纳入spring aop中的目标类的方法。
D. Advice(通知)
所谓通知是指拦截到joinpoint之后所要做的事情就是通知.通知分为前置通知,后置通知,异常通知,最终通知,环绕通知(切面要完成的功能)
E. Target(目标对象):
代理的目标对象
F. Weaving(织入)
是指把切面应用到目标对象来创建新的代理对象的过程.切面在指定的连接点织入到目标对象
通知根据拦截目标类中的目标方法的位置不一样可以分为:前置通知、后置通知、最终通知、环绕通知、异常通知
Aspect(切面)的理解
springAOP的各个概念
AOP实现的两种模式
xml形式
配置的主要过程
A. 前置通知
在spring配置文件中声明切面
在spring配置文件中声明目标类
定义切面、切入点、通知
又例如:
说明:
1、在切面类中,没有必要实现接口,但方法名称要与<aop:before method=”checkSecurity”
中的checkSecurity一样。
2、checkSecurity方法中通过JoinPoint参数可以获得目标类的目标方法名称、参数值等信息。
切入点表达式解释
B. 后置通知
1、 没有特殊说明的地方和前置通知是一样的。
2、 在spring配置文件中
3、 在拦截器中的方法要和checkSecurity方法一样,有两个参数
JoinPoint point 可以获得目标方法和参数值
Object val 这里的名字要和returning=”val”中保持一致,指的是方法的返回值。
4、 returning=”val”时,通知里可以有返回参数,这个参数只能决定通知里能不能拿到方法的返回值,和客户端没有关系。
5、 在执行目标类的目标方法中遇到异常,则不执行后置通知。
例如:
C. 异常通知
1、 没有特殊说明的地方和前置通知一样
2、 在spring配置文件中
例如:
其中throwing指定了传递异常的参数名称
3、 在异常通知中(拦截器)中,必须是checkSecurity方法。方法中有两个参数
JoinPoint point 可以获得方法的名称、参数
Throwable ex 利用ex.getMessage()可以获得异常信息
D. 最终通知
1、 没有特殊说明,和前置通知的配置一样。
2、 在spring配置文件里:
例如:
说明:在最终通知中不受异常的影响。也就是说不论目标方法执行的过程中是否抛出异常,最终通知都将执行。
E. 环绕通知
1、 没有特殊说明和前置通知的配置保持一致。
2、 在spring文件中
3、 在环绕通知中,方法名称为checkSecurity。参数 类型 为ProceedingJoinPoint。
ProceedingJoinPoint的proceed方法相当于invoke方法,调用目标类的目标方法。ProceedingJoinPoint继承了JoinPoint类
4、 能在方法执行的前后加入额外的代码。
说明:
例如:
异常处理
Aop注解形式
A. 前置通知
注意:@Aspectj是按照类型匹配的。
B. 后置通知
C. 异常通知
D. 最终通知
E. 环绕通知
例如: