Spring AOP
五种通知:前置通知后置通知返回通知异常通知环绕通知


首先,配置使用AOP的环境:

需要将以下几个包导入到工程中:
org.springframework.aop-3.1.1.RELEASE.jar ---- ----spring 的面向切面编程,提供AOP(面向切面编程)实现
org.springframework.aspects-3.1.1.RELEASE.jar ---- ----spring 提供对 AspectJ 框架的整合

aopalliance.jar

aspectjweaver-1.7.4.jar

aspectjrt-1.7.4.jar


前置通知:
eg:

新建一个配置文件applicationContext.xml:

Spring-AOP的5种通知_spring 五大通知 ‍&

<context:component-scan base-package="com.zjy.spring.aop"></context:component-scan>表示通过注解配置com.zjy.spring.aop包下的所有类


<aop:aspectj-autoproxy></aop:aspectj-autoproxy>表示让切面类能够自动装配




建立一个日志类:CalculatorLogging.java


Spring-AOP的5种通知_spring 五大通知 ‍&_02

其中
@Aspect注解表示这个类作为一个切面
@Component注解表示这个类同样也要放在IOC容器中


@Before注解表示这个方法是用来作为前置通知,也就是在它签名中所标识的具体方法调用之前就会进入这个方法
("execution(public int com.zjy.spring.aop.Calculator.add(int,..))")表示所有公有的返回值是int类型的属于com.zjy.spring.aop包下的类Calculator中add方法
其中,(int,...)表示这个方法第一个参数是int型,..表示后面的参数数量任意类型任意

打印结果:

Spring-AOP的5种通知_spring 五大通知 ‍&_03


后置通知:

使用方法与前置差不多

Spring-AOP的5种通知_spring 五大通知 ‍&_04

@After注解表示这个方法是用来作为后置通知,也就是在它签名中所标识的具体方法调用之后才会进入这个方法


返回通知:

Spring-AOP的5种通知_spring 五大通知 ‍&_05
@AfterReturning注解表示这个方法是用来作为返回通知,也就是在它签名中所标识的具体方法调用并返回之后才会进入这个方法

若方法出现执行中出现异常, 则不会进入到返回通知,但依然会进入前置和后置value属性表示所装配的类和方法

value属性表示所装配的类和方法
returning表示返回的结果
并且要在方法参数里面添加一个"Object result",这个变量名要与刚才returning所匹配的名字一致



异常通知:

Spring-AOP的5种通知_spring 五大通知 ‍&_06
@AfterThrowing注解表示这个方法是用来作为异常通知,也就是在它签名中所标识的具体方法调用并出现异常之后才会进入这个方法
并且要在方法参数里面添加一个"Exception ex",这个变量名要与刚才throwing所匹配的名字一致!
value属性表示所装配的类和方法
throwing表示返回的异常对象



环绕通知:

Spring-AOP的5种通知_spring 五大通知 ‍&_07
@Around注解表示这个方法是用来作为环绕通知,也就是在它签名中所标识的具体方法调用会进入这个方法
环绕通知其实就相当于一个代理,可以在里面写上前置、后置、异常或返回等
环绕通知的日志方法必须要有返回值,并且以ProceedingJoinPoint pjoinpoint作为参数
pjoinpoint.proceed()表示执行它所受理的方法,并返回执行结果



注:本例中所用到的jar包和截图见文末附件