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