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:
<context:component-scan base-package="com.zjy.spring.aop"></context:component-scan>表示通過注解配置com.zjy.spring.aop包下的所有類
<aop:aspectj-autoproxy></aop:aspectj-autoproxy>表示讓切面類能夠自動裝配
建立一個日志類:CalculatorLogging.java
其中
@Aspect注解表示這個類作為一個切面
@Component注解表示這個類同樣也要放在IOC容器中
@Before注解表示這個方法是用來作為前置通知,也就是在它簽名中所標識的具體方法調用之前就會進入這個方法
("execution(public int com.zjy.spring.aop.Calculator.add(int,..))")表示所有公有的返回值是int類型的屬於com.zjy.spring.aop包下的類Calculator中add方法
其中,(int,...)表示這個方法第一個參數是int型,..表示后面的參數數量任意類型任意
打印結果:
后置通知:
使用方法與前置差不多
@After注解表示這個方法是用來作為后置通知,也就是在它簽名中所標識的具體方法調用之后才會進入這個方法
返回通知:
@AfterReturning注解表示這個方法是用來作為返回通知,也就是在它簽名中所標識的具體方法調用並返回之后才會進入這個方法
若方法出現執行中出現異常, 則不會進入到返回通知,但依然會進入前置和后置value屬性表示所裝配的類和方法
value屬性表示所裝配的類和方法
returning表示返回的結果
並且要在方法參數里面添加一個"Object result",這個變量名要與剛才returning所匹配的名字一致!
異常通知:
@AfterThrowing注解表示這個方法是用來作為異常通知,也就是在它簽名中所標識的具體方法調用並出現異常之后才會進入這個方法
並且要在方法參數里面添加一個"Exception ex",這個變量名要與剛才throwing所匹配的名字一致!
value屬性表示所裝配的類和方法
throwing表示返回的異常對象
環繞通知:
@Around注解表示這個方法是用來作為環繞通知,也就是在它簽名中所標識的具體方法調用會進入這個方法
環繞通知其實就相當於一個代理,可以在里面寫上前置、后置、異常或返回等
環繞通知的日志方法必須要有返回值,並且以ProceedingJoinPoint pjoinpoint作為參數
pjoinpoint.proceed()表示執行它所受理的方法,並返回執行結果
注:本例中所用到的jar包和截圖見文末附件
本文出自 “11179738” 博客,請務必保留此出處http://11189738.blog.51cto.com/11179738/1743383