一、接口
package com.atguigu.spring.aop.xml; //接口 public interface ArithmeticCalculator { int add(int i, int j); int sub(int i, int j); int mul(int i, int j); int div(int i, int j); }
二、接口的实现类
package com.atguigu.spring.aop.xml; //实现类 public class ArithmeticCalculatorImpl implements ArithmeticCalculator { @Override public int add(int i, int j) { int relust = i+j; return relust; } @Override public int sub(int i, int j) { int relust = i-j; return relust; } @Override public int mul(int i, int j) { int relust = i*j; return relust; } @Override public int div(int i, int j) { int relust = i/j; return relust; } }
三、切面一
package com.atguigu.spring.aop.xml; public class LoggingAspect { public void beforeMethod(JoinPoint joinPoint){ String methodName = joinPoint.getSignature().getName(); Object[] args = joinPoint.getArgs(); System.out.println("The method "+methodName+" begins with "+ Arrays.asList(args)); } public void afterMethod(JoinPoint joinPoint){ String methodName = joinPoint.getSignature().getName(); System.out.println("The method "+methodName +" end......"); } public void afterReturning(JoinPoint joinPoint,Object result){ String methodName = joinPoint.getSignature().getName(); System.out.println("The method "+methodName +" end......result:"+result); } public void afterThrowing(JoinPoint joinPoint, Exception ex1){ String methodName = joinPoint.getSignature().getName(); System.out.println("The method "+methodName +"occurs exception :" +ex1); } public Object aroundMethod(ProceedingJoinPoint proceedingJoinPoint){ Object result = null; String methodName = proceedingJoinPoint.getSignature().getName(); try { //前置通知 System.out.println("The method "+methodName+" begins with "+Arrays.asList(proceedingJoinPoint.getArgs())); //执行目标方法 result = proceedingJoinPoint.proceed(); //返回通知 System.out.println("The method ends with "+result); } catch (Throwable e) { //异常通知 System.out.println("The method occurs exception:"+e); throw new RuntimeException(e); } //后置通知 System.out.println("The method "+methodName+" ends........"); return result; } }
四、切面二
package com.atguigu.spring.aop.xml; public class VlidationAspect { public void validateArgs(JoinPoint joinPoint){ System.out.println("------->validate:" + Arrays.asList(joinPoint.getArgs())); } }
五、配置文件applicationContext-xml.xml
<?xml version="1.0" encoding="UTF-8" ?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd"> <!--配置bean--> <bean id="arithmeticCalculator" class="com.atguigu.spring.aop.xml.ArithmeticCalculatorImpl"> </bean> <!--配置切面的bean--> <bean id="loggingAspect" class="com.atguigu.spring.aop.xml.LoggingAspect"> </bean> <!--配置切面的bean--> <bean id="vlidationAspect" class="com.atguigu.spring.aop.xml.VlidationAspect"> </bean> <!--配置AOP--> <aop:config> <!--配置切点表达式--> <aop:pointcut id="pointcut" expression="execution(* com.atguigu.spring.aop.xml.ArithmeticCalculatorImpl.* (..))"/> <!--配置切面及通知--> <!--切面一--> <aop:aspect ref="loggingAspect" order="2"> <aop:before method="beforeMethod" pointcut-ref="pointcut"></aop:before> <aop:after method="afterMethod" pointcut-ref="pointcut"/> <aop:after-returning method="afterReturning" pointcut-ref="pointcut" returning="result"/> <aop:after-throwing method="afterThrowing" pointcut-ref="pointcut" throwing="ex1"/> <!--<aop:around method="aroundMethod" pointcut-ref="pointcut"></aop:around>--> </aop:aspect> <!--切面二--> <aop:aspect ref="vlidationAspect" order="1"> <aop:before method="validateArgs" pointcut-ref="pointcut"></aop:before> </aop:aspect> </aop:config> </beans>
六、测试
package com.atguigu.spring.aop.xml; public class Test_aop { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext-xml.xml"); ArithmeticCalculator arithmeticCalculator = (ArithmeticCalculator) context.getBean("arithmeticCalculator"); System.out.println(arithmeticCalculator.getClass().getName()); int result = arithmeticCalculator.add(1,2); System.out.println("result:"+result); result = arithmeticCalculator.div(200,10); System.out.println("result:"+result); } }