spring学习(四)AOP基本概念和基础知识
一:AOP的基本概念
切面:实际意义是横切关注点模块化,如日志切面,校验切面。编码时就是一个带注解@Component和@Aspect的类(当用注解的方式实现AOP时)
连接点:表示在程序中要加入切点的地方,是一个物理位置,在spring中连接点一般为某个方法的前后位置。
通知:在连接点上执行的行为,其实就是一个带注解的方法。有五种通知类型,一个切面中可以有多个通知方法
@Before——前置通知,在连接点方法执行之前执行通知方法
示范:@Before("execution(cn.bupt.spring9.ServiceUser.add(int,int))")表示在此方法执行之前要执行前置通知方法。还可以通过JoinPoint类来获取此方法的方法名和参数。
@After——后置通知,在连接点方法执行之后执行通知方法
后置通知是在连接点完成之后执行的,无论连接点的方法返回还是抛出异常,方法执行结束之后,都会执行后置通知方法,但后置通知方法不能访问连接点方法的返回值。
@AfterRunning——返回通知,在连接点方法执行返回结果之后执行通知方法
当连接点方法有返回值时调用返回通知方法,返回通知方法可以访问连接点方法的返回值。
示范:@AfterReturning(value="execution(public int cn.bupt.spring.advice.CaculateImp.*(..))",
returning="result")
@AfterThrowing——异常通知,在连接点方法出现异常时执行通知方法
当连接点方法执行时出现异常时可以调用异常通知方法,异常通知方法可以访问异常信息,还可以指定要访问的异常信息的类型
示范:@AfterThrowing(value="execution(public int cn.bupt.spring.advice.CaculateImp.*(..))",
throwing="e")
@Around——环绕通知,环绕着连接点方法执行通知方法
一个通知方法顶上面四个通知方法。
二:编写一个AOP程序的基本过程
1.导入jar包
2.在配置文件中加入aop的命名空间
3.(此处使用基于注解的方式配置Bean)
在配置文件中加入如下配置
<aop:aspectj-autoproxy></aop:aspectj-autoproxy>使注解为@Aspect的类产生动态代理的效果
把横切关注点的代码抽象到一个类中,此类首先是一个Bean所以需要使用@Component注解
此类其次又是一个切面,需要使用@Aspect注解
在类中声明各种通知:即定义各种方法,在方法前使用通知的注解。
三.切面的优先级
使用注解@order(1) @order(2).....指定切面的优先级,值越小,优先级越高。
四.重用切入点表达式
使用注解@Pointcut标注一个方法,该方法可以作为被重用的切入点表达式方法,其他需要使用到该表达式的地方,直接引用该方法。
’示范:
@Pointcut("execution(cn.bupt.spring9.ServiceUser.add(int,int))")
public void fun(){
}
@Before("fun()")

浙公网安备 33010602011771号