• Spring学习--基于 XML 的配置声明切面


    正常情况下 , 基于注解的生命要优先于基于 XML 的声明。

    通过 AspectJ 注解 , 切面可以与 AspectJ 兼容 , 而基于 XML 的配置则是 Spring 专有的。由于 AspectJ 得到越来越多的 AOP 框架支持 , 所以以注解风格编写的切面将会有更多的重用机会。

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <beans xmlns="http://www.springframework.org/schema/beans"
     3        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     4        xmlns:aop="http://www.springframework.org/schema/aop"
     5        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
     6        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd">
     7 
     8 
     9     <!-- 配置 ArithmeticImpl 的 bean -->
    10     <bean id="arithmetic" class="com.itdoc.spring.aop.cutface.ArithmeticImpl"/>
    11 
    12     <!-- 配置切面的 bean -->
    13     <bean id="asjectLogging" class="com.itdoc.spring.aop.cutface.AsjectLogging"/>
    14     <bean id="validate" class="com.itdoc.spring.aop.cutface.Validate"/>
    15 
    16     <!-- 配置 AOP -->
    17     <aop:config>
    18         <!-- 配置切点表达式 -->
    19         <aop:pointcut id="pointcut" expression="execution(* com.itdoc.spring.aop.cutface.*.*(..))"/>
    20         <!--  配置切面通知 -->
    21         <aop:aspect ref="asjectLogging" order="2">
    22             <aop:around method="around" pointcut-ref="pointcut"/>
    23             <aop:after-returning method="afterReturning" pointcut-ref="pointcut" returning="result"/>
    24             <aop:after-throwing method="afterThrowing" pointcut-ref="pointcut" throwing="e"/>
    25         </aop:aspect>
    26         <aop:aspect ref="validate" order="1">
    27             <aop:before method="beforeValidate" pointcut-ref="pointcut"/>
    28         </aop:aspect>
    29 
    30     </aop:config>
    31 </beans>
     1 package com.itdoc.spring.aop.cutface;
     2 
     3 /**
     4  * http://www.cnblogs.com/goodcheap
     5  *
     6  * @author: Wáng Chéng Dá
     7  * @create: 2017-03-03 19:34
     8  */
     9 public interface Arithmetic {
    10 
    11     int add(int i, int j);
    12 
    13     int sub(int i, int j);
    14 
    15     int mul(int i, int j);
    16 
    17     int div(int i, int j);
    18 
    19 }
     1 package com.itdoc.spring.aop.cutface;
     2 
     3 
     4 /**
     5  * http://www.cnblogs.com/goodcheap
     6  *
     7  * @author: Wáng Chéng Dá
     8  * @create: 2017-03-03 19:35
     9  */
    10 public class ArithmeticImpl implements Arithmetic {
    11     @Override
    12     public int add(int i, int j) {
    13         int result = i + j;
    14         return result;
    15     }
    16 
    17     @Override
    18     public int sub(int i, int j) {
    19         int result = i - j;
    20         return result;
    21     }
    22 
    23     @Override
    24     public int mul(int i, int j) {
    25         int result = i * j;
    26         return result;
    27     }
    28 
    29     @Override
    30     public int div(int i, int j) {
    31         int result = i / j;
    32         return result;
    33     }
    34 }
     1 package com.itdoc.spring.aop.cutface;
     2 
     3 import org.aspectj.lang.JoinPoint;
     4 import org.aspectj.lang.ProceedingJoinPoint;
     5 import java.util.Arrays;
     6 
     7 /**
     8  * 通知
     9  * http://www.cnblogs.com/goodcheap
    10  *
    11  * @author: Wáng Chéng Dá
    12  * @create: 2017-03-04 9:50
    13  */
    14 
    15 public class AsjectLogging {
    16 
    17     public void afterReturning(JoinPoint joinPoint, Object result) {
    18         Object methodName = joinPoint.getSignature().getName();
    19         System.out.println("The method " + methodName + " ends with " + result);
    20     }
    21 
    22     public void afterThrowing(JoinPoint joinPoint, Exception e) {
    23         Object methodName = joinPoint.getSignature().getName();
    24         System.out.println("The method " + methodName + " exception with " + e);
    25     }
    26 
    27     public Object around(ProceedingJoinPoint point) {
    28         Object methodName = point.getSignature().getName();
    29         Object[] args = point.getArgs();
    30         Object result = null;
    31         try {
    32             //前置通知
    33             System.out.println("The method " + methodName + " begins with" + Arrays.asList(args));
    34             //执行方法
    35             result = point.proceed();
    36             //返回通知
    37             System.out.println("The method " + methodName + " ends with " + result);
    38         } catch (Throwable e) {
    39             e.printStackTrace();
    40             //异常通知
    41             System.out.println("The method " + methodName + " exception with " + e);
    42         } finally {
    43             //后置通知
    44             System.out.println("The method " + methodName + " ends");
    45         }
    46         return result;
    47     }
    48 }
     1 package com.itdoc.spring.aop.cutface;
     2 
     3 
     4 /**
     5  * http://www.cnblogs.com/goodcheap
     6  *
     7  * @author: Wáng Chéng Dá
     8  * @create: 2017-03-04 12:20
     9  */
    10 public class Validate {
    11 
    12     public void beforeValidate() {
    13         System.out.println("I am Validate's beforeValidate method...");
    14     }
    15 }
     1 package com.itdoc.spring.aop.cutface;
     2 
     3 
     4 import org.springframework.context.ApplicationContext;
     5 import org.springframework.context.support.ClassPathXmlApplicationContext;
     6 
     7 /**
     8  * http://www.cnblogs.com/goodcheap
     9  *
    10  * @author: Wáng Chéng Dá
    11  * @create: 2017-03-04 9:54
    12  */
    13 public class Main {
    14 
    15     public static void main(String[] args) {
    16         ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationConfig.xml");
    17         Arithmetic arithmetic = (Arithmetic) ctx.getBean("arithmetic");
    18         System.out.println("result = " + arithmetic.div(1, 1));
    19     }
    20 }

    控制台输出:

    I am Validate's beforeValidate method...
    The method div begins with[1, 1]
    The method div ends with 1
    The method div ends
    The method div ends with 1
    result = 1

  • 相关阅读:
    PID算法控制直流电机笔记
    HAL库直流电机编码测速(L298N驱动)笔记
    HAl库控制L298N直流电机旋转笔记
    MQTT介绍与使用(转载)
    STM32中STD、HAL、LL库比较
    rpm检验是否被改动过
    find命令 参数
    会话管理测试时的注意点
    无权限修改用户组权限的状况一
    burpsuite + sqlmap 日志导出批量扫描
  • 原文地址:https://www.cnblogs.com/chinda/p/6501128.html
Copyright © 2020-2023  润新知