Spring 使用xml配置AOP的過程詳解
1.前言
在之前的學(xué)習(xí)中,都是使用注解的方式進(jìn)行AOP的配置.其實(shí)使用xml配置文件也可以配置AOP.
2.xml配置AOP
xml配置AOP方法如下:
添加相關(guān)依賴
<dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.3.29</version> </dependency> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>1.9.7</version> </dependency> </dependencies>
相關(guān)bean放到Spring容器中
@Service public class StudentService { public void insert(){ System.out.println("StudentService中的insert方法"); } }
創(chuàng)建切面類注入到Spring中,我這里使用的是@Component
注解,也可以在配置文件中使用Bean標(biāo)簽
@Component public class Aspect { @Pointcut("execution(* com.example.service..*.*(..)") public void pt(){ System.out.println(""); } public void methodBefore(JoinPoint joinPoint){ Object[] args = joinPoint.getArgs(); Object target = joinPoint.getTarget(); MethodSignature signature = (MethodSignature) joinPoint.getSignature(); System.out.println("Before"); } }
在配置文件中開啟組件掃描(因?yàn)槲以趯⑾鄳?yīng)的Bean注入到Spring中時(shí),使用的是注解,如果使用Bean標(biāo)簽,這一步可以省略)
<context:component-scan base-package="com.example"> </context:component-scan>
在配置文件中配置AOP,將切面類(StudentService)中的methodBefore
方法設(shè)置為前置通知
<aop:config> <!--定義切面--> <aop:pointcut id="pt" expression="execution(* com.example.service..*.*(..))"/> <!--配置切面--> <aop:aspect ref="aspect"> <!--配置通知類型--> <!-- <aop:before method="methodBefore" pointcut-ref="pt"/> --> <aop:before method="methodBefore" pointcut="com.example.aspect.Aspect.pt()"/> </aop:aspect> </aop:config>
配置通知類型中有兩種寫法,一種是用pointcut-ref
屬性,值是定義切面時(shí)的id,另一種是使用pointcut
屬性,需要指定切點(diǎn)方法的全類名
運(yùn)行結(jié)果:
可以看到成功將StudentService中的methodBefore
方法設(shè)置為前置通知了
接下來講一下復(fù)雜的通知如何配置,如下:
@AfterReturning(value = "point()",returning = "ret") public void methodAfterReturning(JoinPoint joinPoint, Object ret){ // 方法體 } @AfterThrowing(value = "point()",throwing = "e") public void methodAfterThrowing(JoinPoint joinPoint,Throwable e){ // 方法體 }
@AfterReturning和@AfterThrowing是有兩個(gè)參數(shù)的
以@AfterReturning為例,在切面類中添加對(duì)應(yīng)的普通方法:
@Component public class Aspect { @Pointcut("execution(* com.example.service..*.*(..))") public void pt(){ System.out.println(""); } public void methodBefore(JoinPoint joinPoint){ Object[] args = joinPoint.getArgs(); Object target = joinPoint.getTarget(); MethodSignature signature = (MethodSignature) joinPoint.getSignature(); System.out.println("Before"); } public void methodAfterReturning(JoinPoint joinPoint, Object ret){ System.out.println("AfterReturning: "+ ret); } }
<aop:aspect ref="aspect"> <!--配置通知類型--> <!-- <aop:before method="methodBefore" pointcut-ref="pt"/> --> <aop:before method="methodBefore" pointcut="com.example.aspect.Aspect.pt()"/> <aop:after-returning method="methodAfterReturning" pointcut-ref="pt" returning="ret"/> </aop:aspect>
需要注意在設(shè)置AOP時(shí),標(biāo)簽中有returning這樣一個(gè)屬性
運(yùn)行結(jié)果:
3. 總結(jié)
xml配置AOP的重要步驟:
- 定義切面類,定義切點(diǎn).
- 將目標(biāo)類和切面類添加到Spring容器中(注解或Bean標(biāo)簽),如果是注解方式,需要添加組件掃描
- 在配置文件中配置AOP
在實(shí)際開發(fā)中,用注解配置AOP比較多,xml配置AOP了解即可
到此這篇關(guān)于Spring 使用xml配置AOP的文章就介紹到這了,更多相關(guān)spring配置aop內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java解析Excel文件并把數(shù)據(jù)存入數(shù)據(jù)庫
本篇文章主要介紹了Java解析Excel文件并把數(shù)據(jù)存入數(shù)據(jù)庫 ,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-05-05java使用CKEditor實(shí)現(xiàn)圖片上傳功能
這篇文章主要為大家詳細(xì)介紹了java使用CKEditor實(shí)現(xiàn)圖片上傳功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-07-07解決MyEclipse10.7部署報(bào)錯(cuò)拋空指針異常問題的方法
這篇文章主要介紹了解決MyEclipse10.7部署報(bào)錯(cuò)拋空指針異常問題的方法,需要的朋友可以參考下2015-12-12Java JDBC連接數(shù)據(jù)庫常見操作總結(jié)
這篇文章主要介紹了Java JDBC連接數(shù)據(jù)庫常見操作,結(jié)合實(shí)例形式總結(jié)分析了java基于jdbc連接mysql、Oracle數(shù)據(jù)庫及連接池相關(guān)操作技巧,需要的朋友可以參考下2019-03-03Java日期操作方法工具類實(shí)例【包含日期比較大小,相加減,判斷,驗(yàn)證,獲取年份等】
這篇文章主要介紹了Java日期操作方法工具類,結(jié)合完整實(shí)例形式分析了java針對(duì)日期的各種常見操作,包括日期比較大小,相加減,判斷,驗(yàn)證,獲取年份、天數(shù)、星期等,需要的朋友可以參考下2017-11-11使用IDEA如何打包發(fā)布SpringBoot并部署到云服務(wù)器
這篇文章主要介紹了使用IDEA如何打包發(fā)布SpringBoot并部署到云服務(wù)器問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-12-12詳解eclipse中Maven工程使用Tomcat7以上插件的方法
本篇文章主要介紹了詳解eclipse中Maven工程使用Tomcat7以上插件的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-12-12Spring+Mybatis動(dòng)態(tài)切換數(shù)據(jù)源的方法
這篇文章主要為大家詳細(xì)介紹了Spring+Mybatis動(dòng)態(tài)切換數(shù)據(jù)源的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-01-01