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);    }}

控制台打印:

这里写图片描述

原创粉丝点击