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()")

 

posted on 2017-10-08 21:52  铁牛xx  阅读(275)  评论(0)    收藏  举报

导航