Spring AOP
来源:互联网 发布:拖动拼图验证码js插件 编辑:程序博客网 时间:2024/05/17 23:29
原作者:尚硅谷-佟刚
ArithmeticCalculator.java
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); }
ArithmeticCalculatorImpl.java
package com.atguigu.spring.aop.xml;public class ArithmeticCalculatorImpl implements ArithmeticCalculator{ public int add(int i, int j) { int result = i + j; return result; } public int sub(int i, int j) { int result = i - j; return result; } public int mul(int i, int j) { int result = i * j; return result; } public int div(int i, int j) { int result = i / j; return result; }}
LoggingAspect.java
package com.atguigu.spring.aop.xml;import java.util.Arrays;import org.aspectj.lang.JoinPoint;import org.aspectj.lang.ProceedingJoinPoint;public class LoggingAspect { public void beforeMethod(JoinPoint joinPoint){ String methodName = joinPoint.getSignature().getName(); Object[] args = joinPoint.getArgs(); System.out.println("The method1 " + methodName + " begin with " + Arrays.toString(args)); } public void afterMethod(JoinPoint joinPoint){ String methodName = joinPoint.getSignature().getName(); System.out.println("The method1 " + methodName + " ends"); } public void afterReturning(JoinPoint joinPoint, int result){ String methodName = joinPoint.getSignature().getName(); System.out.println("The method1 " + methodName + " ends with " + result); } public void afterThrowing(JoinPoint joinPoint, ArithmeticException e){ String methodName = joinPoint.getSignature().getName(); System.out.println("The method1 " + methodName + " occurs execution " + e); } public Object aroundMethod(ProceedingJoinPoint pjd){ Object result = null; String methodName = pjd.getSignature().getName(); //执行目标方法 try { //前置通知 System.out.println("The method " + methodName + " begin with " + Arrays.asList(pjd.getArgs())); result = pjd.proceed(); //返回通知 System.out.println("The method " + methodName + " ends with " +result); } catch (Throwable e) { //异常通知 System.out.println("The method " + methodName + " occurs execution: " + e); } //后置通知 System.out.println("The method " + methodName + " ends"); return result; }}
VlidationAspect .java
package com.atguigu.spring.aop.xml;import java.util.Arrays;import org.aspectj.lang.JoinPoint;import org.aspectj.lang.annotation.Aspect;import org.aspectj.lang.annotation.Before;import org.springframework.core.annotation.Order;import org.springframework.stereotype.Component;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" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.1.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.1.xsd"> <!-- 配置bean --> <bean id="arithmeticCalculator" class="com.atguigu.spring.aop.xml.ArithmeticCalculatorImpl" /> <!-- 配置切面的bean --> <bean id="loggingAspect" class="com.atguigu.spring.aop.xml.LoggingAspect" /> <bean id="vlidationAspect" class="com.atguigu.spring.aop.xml.VlidationAspect" /> <!-- 配置 AOP --> <aop:config> <!-- 配置切点表达式 --> <aop:pointcut expression="execution(* com.atguigu.spring.aop.xml.ArithmeticCalculator.*(..))" id="pointcut"/> <!-- 配置切面 及通知--> <aop:aspect ref="loggingAspect" order="2"> <aop:before method="beforeMethod" pointcut-ref="pointcut"/> <aop:after method="afterMethod" pointcut-ref="pointcut"/> <aop:after-throwing method="afterThrowing" pointcut-ref="pointcut" throwing="e"/> <aop:after-returning method="afterReturning" pointcut-ref="pointcut" returning="result"/> <!-- <aop:around method="aroundMethod" pointcut-ref="pointcut"/> --> </aop:aspect> <aop:aspect ref="vlidationAspect" order="1"> <aop:before method="validateArgs" pointcut-ref="pointcut"/> </aop:aspect> </aop:config></beans>
Main.java
package com.atguigu.spring.aop.xml;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;public class Main { public static void main(String[] args) { ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext-xml.xml"); ArithmeticCalculator arithmeticCalculator = (ArithmeticCalculator) ctx.getBean("arithmeticCalculator"); System.out.println(arithmeticCalculator.getClass().getName()); int result = arithmeticCalculator.add(1, 2); System.out.println("result: " + result); result = arithmeticCalculator.div(1000, 0); System.out.println("result: " + result); }}
控制台打印:
阅读全文
0 0
- AOP、Spring的AOP
- AOP--Spring AOP
- Spring AOP 嵌套AOP
- spring AOP
- Spring AOP
- Spring AOP
- spring aop
- Spring AOP
- spring AOP
- spring aop
- Spring aop
- Spring-AOP
- Spring AOP
- spring aop
- spring aop
- Spring AOP
- Spring AOP
- Spring Aop
- fashion-mnist
- Java中的链表-----LinkedList<E>泛型类
- Magical Bridges UVALive
- Linux-centos下安装lvs+keepalived高可用
- APICloud框架——总结一下最近开发APP遇到的一些问题 (三)
- Spring AOP
- 身份证识别SDK-身份证识别api(移动端-服务器端)
- 每周LeetCode算法题(一):Longest Substring Without Repeating Characters
- 类似QQ中“好友”、“群”、“多人聊天”之间在一个Activity里面切换界面
- C语言的二维指针及其动态内存分配和释放
- Http协议
- php基础面试题
- mybatis 解析Integer为0的属性,解析成空字符串
- Protocol Buffer技术详解(语言规范)