Spring-AOP的5種通知


原創作品,允許轉載,轉載時請務必以超鏈接形式標明文章  原始出處 、作者信息和本聲明。否則將追究法律責任。 http://11189738.blog.51cto.com/11179738/1743383

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:

wKiom1bGrWHxi9J6AACZOy2g3Rk142.png

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


<aop:aspectj-autoproxy></aop:aspectj-autoproxy>表示讓切面類能夠自動裝配

 

 

 

建立一個日志類:CalculatorLogging.java

 

wKioL1bGruSAMYLKAABc-Ki6znM855.png

其中
@Aspect注解表示這個類作為一個切面
@Component注解表示這個類同樣也要放在IOC容器中

 

@Before注解表示這個方法是用來作為前置通知,也就是在它簽名中所標識的具體方法調用之前就會進入這個方法
("execution(public int com.zjy.spring.aop.Calculator.add(int,..))")表示所有公有的返回值是int類型的屬於com.zjy.spring.aop包下的類Calculator中add方法
其中,(int,...)表示這個方法第一個參數是int型,..表示后面的參數數量任意類型任意

打印結果:

wKioL1bGr03DK2OGAAAMNRzHprk121.png

 

后置通知:

使用方法與前置差不多

wKioL1bGsOPCalk0AAA3zajnKUY644.png

@After注解表示這個方法是用來作為后置通知,也就是在它簽名中所標識的具體方法調用之后才會進入這個方法

 

返回通知:

wKiom1bGsejBS7GnAABAhEUu0xY404.png
@AfterReturning注解表示這個方法是用來作為返回通知,也就是在它簽名中所標識的具體方法調用並返回之后才會進入這個方法

若方法出現執行中出現異常, 則不會進入到返回通知,但依然會進入前置和后置value屬性表示所裝配的類和方法

value屬性表示所裝配的類和方法
returning表示返回的結果
並且要在方法參數里面添加一個"Object result",這個變量名要與剛才returning所匹配的名字一致!

 

 

異常通知:

wKioL1bGtqWw9Z71AAA7P4cKNlw141.png
@AfterThrowing注解表示這個方法是用來作為異常通知,也就是在它簽名中所標識的具體方法調用並出現異常之后才會進入這個方法
並且要在方法參數里面添加一個"Exception ex",這個變量名要與剛才throwing所匹配的名字一致!
value屬性表示所裝配的類和方法
throwing表示返回的異常對象

 

 

環繞通知:

wKioL1bGu_uQzYUpAABdT-Ki-M8088.png
@Around注解表示這個方法是用來作為環繞通知,也就是在它簽名中所標識的具體方法調用會進入這個方法
環繞通知其實就相當於一個代理,可以在里面寫上前置、后置、異常或返回等
環繞通知的日志方法必須要有返回值,並且以ProceedingJoinPoint pjoinpoint作為參數
pjoinpoint.proceed()表示執行它所受理的方法,並返回執行結果

 

 

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

 

 

本文出自 “11179738” 博客,請務必保留此出處http://11189738.blog.51cto.com/11179738/1743383


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM