Spring AOP
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring AOP相关的知识,希望对你有一定的参考价值。
鏍囩锛?a href='http://www.mamicode.com/so/1/%e5%87%bd%e6%95%b0%e8%bf%94%e5%9b%9e%e5%80%bc' title='鍑芥暟杩斿洖鍊?>鍑芥暟杩斿洖鍊?/a> method strong nbsp code 鍙栧嚭 鍒囬潰 img ros
1. 浠€涔堟槸闈㈠悜鍒囬潰缂栫▼锛?/h3>
??闈㈠悜鍒囬潰缂栫▼鏄疭pring鐨勭浜屽ぇ鐗规€э紝瀹冭兘灏嗕竴涓嚱鏁颁腑闈炰富浣撲絾鏈夊緢蹇呰鐨勪唬鐮佸皝瑁呭埌涓€涓崟鐙殑绫讳腑锛屽湪绋嬪簭杩愯鐨勬椂鍊欏啀鎶婂畠浠彃鍏ュ埌鍑芥暟涓€傝繖鏍疯兘浣跨▼搴忕尶鍙叧娉ㄥ嚱鏁扮殑涓讳綋鍔熻兘锛岃€屼笖鍐欏嚭鏉ョ殑浠g爜鍏锋湁鍏锋湁杈冨己鐨勫彲璇绘€э紝绠€绾︽槑浜嗐€?nbsp;
闈㈠悜鍒囬潰缂栫▼鐨勪紭鐐规湁涓や釜锛?nbsp;
1. 涓€涓嚱鏁颁腑鎵€鏈夐澶栫殑鍔熻兘閮借灏佽鍦ㄤ竴涓被涓紝鑰屼笉鏄垎鏁e湪鍑芥暟鐨勫悇澶勩€?nbsp;
2. 鐢变簬灏嗛潪涓讳綋鍔熻兘鐨勪唬鐮佽浆绉诲埌鍏朵粬绫讳腑锛屽洜姝ゅ嚱鏁扮殑浠g爜灏嗘洿浣崇畝娲併€?/span>
寮€濮嬩娇鐢?/h2>
??鍋囪鐜板湪鏈変竴涓嚱鏁帮紝鐢ㄦ潵鏌ヨ鏁版嵁搴撲腑鍚嶅瓧涓簄ame鐨凱erson瀵硅薄锛?/p>
public String queryPersons(String name){
//鏌ヨ鐨勫叿浣撴搷浣溾€︹€? //姝ゅ鐪佺暐100琛屼唬鐮佲€︹€?/span>
}
銆€銆€鎴戜滑闇€瑕佸湪鏌ヨ寮€濮嬪墠鍒ゆ柇name鏄惁涓虹┖锛屽湪鏌ヨ缁撴潫鍚庤褰曟搷浣滄棩蹇楋紝鍦ㄦ煡璇㈠彂鐢熷紓甯告椂璁板綍寮傚父鏃ュ織銆?nbsp;
銆€銆€鍦ㄨ繃鍘伙紝鎴戜滑鎶婅繖浜涗唬鐮侀兘鐩存帴鍐欏湪杩欎釜鍑芥暟涓紝杩欐牱浼氬鑷磋繖涓嚱鏁板緢闀匡紝鍙鎬у緢宸€備笅闈㈡垜浠娇鐢ㄩ潰鍚戝垏闈㈢紪绋嬬殑鎬濇兂瑙e喅杩欎釜闂銆?nbsp;
1. 瀹氫箟鍒囬潰浠g爜
棣栧厛闇€瑕佸皢杩欎釜鍑芥暟涓澶栫殑鍔熻兘灏佽鍒颁竴涓被涓紝杩欎釜绫诲氨鏄竴涓櫘閫氱被锛屽姛鑳藉皝瑁呭湪鍑芥暟涓細
class PersonAspect(){
/**
* 鍒ゆ柇鍙傛暟鏄惁涓虹┖
*/
public void verifyNull(String name){
//鍒ゆ柇鍙傛暟鏄惁涓虹┖
}
/**
* 璁板綍鎿嶄綔鏃ュ織
*/
public void logInfo(){
}
/**
* 璁板綍寮傚父鏃ュ織
*/
public void logError(){
}
}
2. 灏嗗垏闈㈠0鏄庝负bean
鍦⊿pring鐨勯厤缃枃浠朵腑娣诲姞bean鐨勫0鏄庯細
<bean id="personAspect" class="com.njupt.PersonAspect">
</bean>
鎴栬€呯洿鎺ュ湪PersonAspect绫讳笂浣跨敤@Componet鏍囨敞锛?/p>
@Componet("personAspect")
class PersonAspect(){
/**
* 鍒ゆ柇鍙傛暟鏄惁涓虹┖
*/
public void verifyNull(String name){
//鍒ゆ柇鍙傛暟鏄惁涓虹┖
}
/**
* 璁板綍鎿嶄綔鏃ュ織
*/
public void logInfo(){
}
/**
* 璁板綍寮傚父鏃ュ織
*/
public void logError(){
}
}
View Code
3. 澹版槑閫氱煡
瀹氫箟濂戒簡棰濆鐨勫姛鑳戒箣鍚庯紝鎺ヤ笅鏉ユ垜浠渶瑕佸憡璇塖pring锛岃繖浜涘姛鑳介渶瑕佸湪浣曟椂娣诲姞鍒?span style="background-color: #ff9900">鍝釜鍑芥暟鐨勪粈涔堜綅缃?/strong>
锛屽洜姝ゆ垜浠渶瑕佸湪Spring鐨勯厤缃枃浠朵腑浣滃涓嬪0鏄庯細
<aop:config>
<aop:aspect ref="personAspect">
<!-- 鍦╭ueryPersons鍑芥暟鎵ц涔嬪墠鍏堣繍琛屽嚱鏁皏erifyNull -->
<aop:before pointcut="excution(* com.njupt.Person.queryPersons(..))" method="verifyNull" />
<!-- 鍦╭ueryPersons鍑芥暟鎵ц涔嬪悗鍐嶈繍琛屽嚱鏁發ogInfo -->
<aop:after-returning pointcut="excution(* com.njupt.Person.queryPersons(..))" method="logInfo" />
<!-- 鍦╭ueryPersons鍑芥暟鍙戠敓寮傚父鏃惰繍琛屽嚱鏁發ogError -->
<aop:throwing pointcut="excution(* com.njupt.Person.queryPersons(..))" method="logError" />
</aop:config>
public String queryPersons(String name){ //鏌ヨ鐨勫叿浣撴搷浣溾€︹€? //姝ゅ鐪佺暐100琛屼唬鐮佲€︹€?/span> }
銆€銆€鍦ㄨ繃鍘伙紝鎴戜滑鎶婅繖浜涗唬鐮侀兘鐩存帴鍐欏湪杩欎釜鍑芥暟涓紝杩欐牱浼氬鑷磋繖涓嚱鏁板緢闀匡紝鍙鎬у緢宸€備笅闈㈡垜浠娇鐢ㄩ潰鍚戝垏闈㈢紪绋嬬殑鎬濇兂瑙e喅杩欎釜闂銆?nbsp;
class PersonAspect(){ /** * 鍒ゆ柇鍙傛暟鏄惁涓虹┖ */ public void verifyNull(String name){ //鍒ゆ柇鍙傛暟鏄惁涓虹┖ } /** * 璁板綍鎿嶄綔鏃ュ織 */ public void logInfo(){ } /** * 璁板綍寮傚父鏃ュ織 */ public void logError(){ } }
<bean id="personAspect" class="com.njupt.PersonAspect"> </bean>
@Componet("personAspect") class PersonAspect(){ /** * 鍒ゆ柇鍙傛暟鏄惁涓虹┖ */ public void verifyNull(String name){ //鍒ゆ柇鍙傛暟鏄惁涓虹┖ } /** * 璁板綍鎿嶄綔鏃ュ織 */ public void logInfo(){ } /** * 璁板綍寮傚父鏃ュ織 */ public void logError(){ } }
<aop:config> <aop:aspect ref="personAspect"> <!-- 鍦╭ueryPersons鍑芥暟鎵ц涔嬪墠鍏堣繍琛屽嚱鏁皏erifyNull --> <aop:before pointcut="excution(* com.njupt.Person.queryPersons(..))" method="verifyNull" /> <!-- 鍦╭ueryPersons鍑芥暟鎵ц涔嬪悗鍐嶈繍琛屽嚱鏁發ogInfo --> <aop:after-returning pointcut="excution(* com.njupt.Person.queryPersons(..))" method="logInfo" /> <!-- 鍦╭ueryPersons鍑芥暟鍙戠敓寮傚父鏃惰繍琛屽嚱鏁發ogError --> <aop:throwing pointcut="excution(* com.njupt.Person.queryPersons(..))" method="logError" /> </aop:config>
鍒版涓烘锛孲pring AOP宸茬粡鍙互杩愯浜嗭紒
4. 澹版槑鐜粫閫氱煡
??鍦ㄤ笂杩扮ず渚嬩腑锛屽嚱鏁板墠鎻掑叆涓€娈典唬鐮侊紝鍑芥暟鍚庢彃鍏ヤ竴娈典唬鐮侊紝鍑芥暟寮傚父鏃舵彃鍏ヤ竴娈典唬鐮侊紝杩欎簺浠g爜鍧楅兘鏄嫭绔嬬殑锛屾棤娉曞叡浜暟鎹€傚鏋滈渶瑕佸疄鐜板嚱鏁板墠鍚庝唬鐮佸潡鐨勬暟鎹叡浜紝閭e氨瑕佷娇鐢ㄧ幆缁曢€氱煡銆?nbsp;
璇存潵涔熷緢绠€鍗曪紝棣栧厛闇€瑕佸湪PersonAspect绫讳腑鍔犱笂涓€涓弬鏁颁负ProceedingJoinPoint鐨勫嚱鏁帮紝濡備笅鎵€绀猴細
@Componet("personAspect") class PersonAspect(){ /** * 鍒ゆ柇鍙傛暟鏄惁涓虹┖ */ public void verifyNull(String name){ //鍒ゆ柇鍙傛暟鏄惁涓虹┖ } /** * 璁板綍鎿嶄綔鏃ュ織 */ public void logInfo(){ } /** * 璁板綍寮傚父鏃ュ織 */ public void logError(){ } /** * 鐜粫閫氱煡 */ public void xxx(ProceedingJoinPoint joinPoint){ int num = 0; //鍦ㄥ嚱鏁板墠鎵ц涓€浜涘姛鑳斤紝淇敼num鍙傛暟 //鎵ц鍑芥暟 joinPoint.proceed(); //鍦ㄥ嚱鏁板悗澶勭悊num num++; //鈥︹€?/span> } }
鐒跺悗鍦ㄩ厤缃枃浠朵腑鎶婅繖涓嚱鏁板0鏄庝负鐜粫閫氱煡鍗冲彲锛?/p>
<aop:config> <aop:aspect ref="personAspect"> <!-- 鍦╭ueryPersons鍑芥暟鎵ц涔嬪墠鍏堣繍琛屽嚱鏁皏erifyNull --> <aop:before pointcut="excution(* com.njupt.Person.queryPersons(..))" method="verifyNull" /> <!-- 鍦╭ueryPersons鍑芥暟鎵ц涔嬪悗鍐嶈繍琛屽嚱鏁發ogInfo --> <aop:after-returning pointcut="excution(* com.njupt.Person.queryPersons(..))" method="logInfo" /> <!-- 鍦╭ueryPersons鍑芥暟鍙戠敓寮傚父鏃惰繍琛屽嚱鏁發ogError --> <aop:throwing pointcut="excution(* com.njupt.Person.queryPersons(..))" method="logError" /> <!-- 鐜粫閫氱煡 --> <aop:around pointcut="excution(* com.njupt.Person.queryPersons(..))" method="xxx()" /> </aop:aspect> </aop:config>
鍒版涓烘锛孲pring鐨凙OP浠嬬粛瀹屾瘯锛屼笅闈粙缁嶅浣曚娇鐢ㄦ敞瑙e彇浠ML銆?/p>
浣跨敤娉ㄨВ浠f浛XML
1. 娉ㄨВ鍒囬潰
? 棣栧厛闇€瑕佸湪鍒囬潰绫讳笂鍔犱笂娉ㄨВ@Aspect锛屽憡璇塖pring杩欎釜绫绘槸涓垏闈㈢被锛?nbsp;
??鍏舵闇€瑕佸湪鍒囬潰绫讳腑鍒涘缓涓€涓嚱鏁帮紝鐢ㄤ簬瀹氫箟鍒囩偣銆傝鍑芥暟鐨勫悕瀛楀嵆涓哄垏鐐瑰悕锛屽嚱鏁拌繑鍥炲€煎拰鍙傛暟鍧囦负绌恒€?/p>
@Aspect class PersonAspect(){ /** * 瀹氫箟鍒囩偣 */ @Pointcut("excution(* com.njupt.Person.queryPersons(..))") public void personAspect(){ } /** * 鍒ゆ柇鍙傛暟鏄惁涓虹┖ */ @Before("personAspect()") public void verifyNull(String name){ //鍒ゆ柇鍙傛暟鏄惁涓虹┖ } /** * 璁板綍鎿嶄綔鏃ュ織 */ @AfterReturning("personAspect()") public void logInfo(){ } /** * 璁板綍寮傚父鏃ュ織 */ @AfterThrowing("personAspect()") public void logError(){ } /** * 鐜粫閫氱煡 */ @Around("personAspect()") public void xxx(ProceedingJoinPoint joinPoint){ int num = 0; //鍦ㄥ嚱鏁板墠鎵ц涓€浜涘姛鑳斤紝淇敼num鍙傛暟 //鎵ц鍑芥暟 joinPoint.proceed(); //鍦ㄥ嚱鏁板悗澶勭悊num num++; //鈥︹€?/span> } }
杞嚜锛歨ttps://blog.csdn.net/u010425776/article/details/51044138
以上是关于Spring AOP的主要内容,如果未能解决你的问题,请参考以下文章