直播网站开发技术,西安seo关键词排名,免费wap建站的网址是什么了,wordpress优惠券插件转载自:https://www.cnblogs.com/ooooevan/p/5823598.html
讲了用注解配置AOP,现在讲用xml怎么配置AOP 其实逻辑是一样的,只是用xml的方法,要把这种逻辑写出来,告诉spring框架去执行。
方法接口 package com.atguigu…
转载自:https://www.cnblogs.com/ooooevan/p/5823598.html
讲了用注解配置AOP,现在讲用xml怎么配置AOP
其实逻辑是一样的,只是用xml的方法,要把这种逻辑写出来,告诉spring框架去执行。
方法接口
package com.atguigu.spring.aop.impl;public interface Calculator {public int add(int i,int j);public int sub(int i,int j);public int div(int i,int j);public int mul(int i,int j);
}
方法实现类
package com.atguigu.spring.aop.impl;public class CalculatorImpl implements Calculator{public int add(int i,int j){return i+j;};public int sub(int i,int j){return i-j;};public int div(int i,int j){return i/j;};public int mul(int i,int j){return i*j;}
}
日志切面:
package com.atguigu.spring.aop.impl;import java.util.Arrays;
import java.util.List;public class LoggingAspect {//前置通知日志日志public void beforedMethod(JoinPoint joinPoint){String methodName=joinPoint.getSignature().getName();List<Object> args = Arrays.arrays(joinPoint.getArgs());System.out.println("The method "+ methodName +"begins: "+args);}//返回通知日志public void afterReturningMethod(Joinpoint joinpoint,Object result){String methodName=joinPoint.getSignature().getName();System.out.println("The method "+methodName+" ends with "+result);}// 异常通知日志public void afterThrowingMethod(Joinpoint joinpoint,Exception e){String methodName=joinPoint.getSignature().getName();System.out.println("The method "+methodName+" occurs excetion "+e);}
}
验证切面:
package com.atguigu.spring.aop.impl;import java.util.Arrays;
import java.util.List;public class ValidationAspect {public void beforedMethod(JoinPoint joinPoint){System.out.println("---->Validation: "+ Arrays.aslist(joinPoint.getArgs));}
}
main函数
package com.atguigu.spring.aop.impl;import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class Main {public static void main(String[] args) {ApplicationContext ctx=new ClassPathXmlApplicationContext("application.xml");Calculator cal = (Calculator) ctx.getBean(Calculator.class);int result=cal.add(1,2);System.out.println("result: "+result);}
}
xml配置
<!--先配置要使用的bean和切面bean,让spring容器创建对象-->
<!-- 配置bean -->
<bean id="calculatorimpl" class="com.atguigu.spring.aop.impl.Calculatorimpl"></bean>
<!-- 配置切面的bean -->
<bean id="loggingAspect" class="com.atguigu.spring.aop.impl.LoggingAspect"></bean>
<bean id="validationAspect" class="com.atguigu.spring.aop.impl.ValidationAspect"></bean><!-- 配置AOP ,表示出对象中的逻辑-->
<aop:config><!-- 配置切点表达式 --><aop:pointcut expression="execution(* com.atguigu.spring.aop.impl.CalculatorImpl.*(int, int))" id="pointcut"></aop:pointcut><!-- 配置切面通知 --><aop:aspect ref="validationAspect" order="2"><aop:before method="beforeMethod" pointcut-ref="pointcut"></aop:before></aop:aspect><!-- 配置切面通知 --><aop:aspect ref="loggingAspect" order="1"><!--前置通知 --><aop:before method="beforeMethod" pointcut-ref="pointcut"></aop:before><!--返回通知,注意,方法中有多少个参数,这里就要配置多少个参数,参数值和函数中一致--><aop:after-returning method="afterReturningMethod" pointcut-ref="pointcut" returning="result"></aop:after-returning><!--异常通知,注意,方法中有多少个参数,这里就要配置多少个参数,参数值和函数中一致--><aop:after-throwing method="afterThrowingMethod" pointcut-ref="pointcut" throwing="e"></aop:after-throwing></aop:aspect>
</aop:config>
结果和注解配置的一致,但配置比较麻烦,不推荐使用。