zoukankan      html  css  js  c++  java
  • Spring AOP(6)-- XML配置

    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.xsd
    http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.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 id="vlidationAspect"
    class="com.atguigu.spring.aop.xml.VlidationAspect"></bean>

    <!-- 配置 AOP -->
    <aop:config>
    <!-- 配置切点表达式 -->
    <aop:pointcut expression="execution(* com.atguigu.spring.aop.xml.ArithmeticCalculator.*(int, int))"
    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>

    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 {

    @Override
    public int add(int i, int j) {
    int result = i + j;
    return result;
    }

    @Override
    public int sub(int i, int j) {
    int result = i - j;
    return result;
    }

    @Override
    public int mul(int i, int j) {
    int result = i * j;
    return result;
    }

    @Override
    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;
    import org.aspectj.lang.annotation.Around;

    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 + " ends");
    }

    public void afterReturning(JoinPoint joinPoint, Object result){
    String methodName = joinPoint.getSignature().getName();
    System.out.println("The method " + methodName + " ends with " + result);
    }

    public void afterThrowing(JoinPoint joinPoint, Exception e){
    String methodName = joinPoint.getSignature().getName();
    System.out.println("The method " + methodName + " occurs excetion:" + e);
    }

    @Around("execution(public int com.atguigu.spring.aop.ArithmeticCalculator.*(..))")
    public Object aroundMethod(ProceedingJoinPoint pjd){

    Object result = null;
    String methodName = pjd.getSignature().getName();

    try {
    //前置通知
    System.out.println("The method " + methodName + " begins 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 exception:" + e);
    throw new RuntimeException(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;

    public class VlidationAspect {

    public void validateArgs(JoinPoint joinPoint){
    System.out.println("-->validate:" + Arrays.asList(joinPoint.getArgs()));
    }

    }

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

    }

  • 相关阅读:
    IIS配置(持续更新中...)
    T-SQL Table-valued Function使用分隔符将字符串转换为表
    英语中的时态
    网页内容扫描器
    20145223 杨梦云 《网络对抗》 Web安全基础实践
    20145223 杨梦云 《网络对抗》 Web基础
    20145223 杨梦云 《网络对抗》 网络欺诈技术防范
    20145223 杨梦云 《网络对抗》 信息搜集与漏洞扫描
    20145223 杨梦云 《网络对抗》 MSF基础应用
    20145223 杨梦云 《网络对抗》恶意代码分析
  • 原文地址:https://www.cnblogs.com/yang-hao/p/5821845.html
Copyright © 2011-2022 走看看