當前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
Spring 基于xml配置方式的AOP
生活随笔
收集整理的這篇文章主要介紹了
Spring 基于xml配置方式的AOP
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
我們具體用代碼來說明:
?
1、ArithmeticCalculator.java
1 package com.proc; 2 3 public interface ArithmeticCalculator { 4 int add(int i, int j); 5 int sub(int i, int j); 6 7 int mul(int i, int j); 8 int div(int i, int j); 9 }?
2、ArithmeticCalculatorImpl.java 實現接口ArithmeticCalculator
1 package com.proc; 2 3 public class ArithmeticCalculatorImpl implements ArithmeticCalculator{ 4 public int add(int i, int j) { 5 int result = i + j; 6 return result; 7 } 8 9 public int sub(int i, int j) { 10 int result = i - j; 11 return result; 12 } 13 14 public int mul(int i, int j) { 15 int result = i * j; 16 return result; 17 } 18 19 public int div(int i, int j) { 20 int result = i / j; 21 return result; 22 } 23 }?
3、LoggingAspect.java 日志切面
1 package com.proc; 2 3 import org.aspectj.lang.JoinPoint; 4 import org.aspectj.lang.ProceedingJoinPoint; 5 import org.aspectj.lang.annotation.After; 6 import org.aspectj.lang.annotation.AfterReturning; 7 import org.aspectj.lang.annotation.AfterThrowing; 8 9 10 public class LoggingAspect { 11 12 public void beforeMethod(JoinPoint point){ 13 System.out.println("正在執行方法: "+point.getSignature().getName()); 14 } 15 16 17 public void afterMethod(JoinPoint point){ 18 System.out.println("方法執行結束: "+point.getSignature().getName()); 19 } 20 21 22 public void afterReturningMethod(JoinPoint point,Object retVal){ 23 System.out.println("方法: "+point.getSignature().getName()+"執行結果為:"+retVal); 24 } 25 26 27 public void afterThrowingMethod(JoinPoint point,Exception ex){ 28 System.out.println("執行方法: "+point.getSignature().getName()+"出現了異常:"+ex.getMessage()); 29 } 30 31 public Object aroundMethod(ProceedingJoinPoint point){ 32 33 System.out.println("環繞通知: "+point.getSignature().getName()); 34 Object result=null; 35 //這里相當于前置通知 36 try { 37 //執行方法 38 result= point.proceed(); 39 //這里相當于結果通知 40 } catch (Throwable e) { 41 //這里相當于異常通知 42 e.printStackTrace(); 43 44 } 45 //這里相當于后置通知 46 System.out.println("環繞通知: "+point.getSignature().getName()); 47 return result; 48 } 49 }其實這也就是一個普通類,里面定義了寫方法
?
4、ValidateAspect.java 驗證切面
1 package com.proc; 2 3 import org.aspectj.lang.JoinPoint; 4 5 public class ValidateAspect { 6 public void beforeMethod(JoinPoint point){ 7 System.out.println("驗證前置通知: "+point.getSignature().getName()); 8 } 9 }?
5、applicationContext.xml配置
1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xmlns:aop="http://www.springframework.org/schema/aop" 5 xsi:schemaLocation="http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd 6 http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> 7 8 <bean id="arithmeticCalculator" class="com.proc.ArithmeticCalculatorImpl"/> 9 <bean id="loggingAspect" class="com.proc.LoggingAspect" /> 10 <bean id="validateAspect" class="com.proc.ValidateAspect"/> 11 12 <aop:config> 13 <!-- 配置切面表達式 --> 14 <aop:pointcut expression="execution(* *..*(..))" id="pointcut"/> 15 16 <!-- 配置切面及通知 --> 17 <aop:aspect ref="loggingAspect" order="1"> 18 <aop:before method="beforeMethod" pointcut-ref="pointcut"/> 19 <aop:after method="afterMethod" pointcut-ref="pointcut"/> 20 <aop:after-returning method="afterReturningMethod" pointcut-ref="pointcut" returning="retVal"/> 21 <aop:after-throwing method="afterThrowingMethod" pointcut-ref="pointcut" throwing="ex"/> 22 <aop:around method="aroundMethod" pointcut-ref="pointcut" /> 23 </aop:aspect> 24 25 <aop:aspect ref="validateAspect" order="2"> 26 <aop:before method="beforeMethod" pointcut-ref="pointcut"/> 27 </aop:aspect> 28 </aop:config> 29 </beans>?
測試代碼:
1 ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml"); 2 ArithmeticCalculator calc=(ArithmeticCalculator) ctx.getBean("arithmeticCalculator"); 3 System.out.println(calc.add(3, 5)); 4 System.out.println(calc.sub(3, 5)); 5 System.out.println(calc.mul(6, 2)); 6 System.out.println(calc.div(6, 2));?
輸出結果:
正在執行方法: add
環繞通知: add
驗證前置通知: add
環繞通知: add
方法: add執行結果為:8
方法執行結束: add
8
正在執行方法: sub
環繞通知: sub
驗證前置通知: sub
環繞通知: sub
方法: sub執行結果為:-2
方法執行結束: sub
-2
正在執行方法: mul
環繞通知: mul
驗證前置通知: mul
環繞通知: mul
方法: mul執行結果為:12
方法執行結束: mul
12
正在執行方法: div
環繞通知: div
驗證前置通知: div
環繞通知: div
方法: div執行結果為:3
方法執行結束: div
3
轉載于:https://www.cnblogs.com/caoyc/p/5629650.html
總結
以上是生活随笔為你收集整理的Spring 基于xml配置方式的AOP的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ???既然post可以将form 表单的
- 下一篇: JPA关系映射之one-to-many和