zoukankan      html  css  js  c++  java
  • [原创]java WEB学习笔记107:Spring学习---AOP切面的优先级,重用切点表达式

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用

    内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系。

    本人互联网技术爱好者,互联网技术发烧友

    微博:伊直都在0221

    QQ:951226918

    -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    1.切面的优先级

      1) 在同一个连接点上应用不止一个切面时, 除非明确指定, 否则它们的优先级是不确定的.

      2) 切面的优先级可以通过实现 Ordered 接口或利用 @Order 注解指定.

      3) 实现 Ordered 接口, getOrder() 方法的返回值越小, 优先级越高.

      4) 若使用 @Order 注解, 序号出现在注解中

    ValidateArgs.java
     1 package com.jason.spring.aop.impl;
     2 
     3 import java.util.Arrays;
     4 
     5 import org.aspectj.lang.JoinPoint;
     6 import org.aspectj.lang.annotation.Aspect;
     7 import org.aspectj.lang.annotation.Before;
     8 import org.springframework.context.annotation.Bean;
     9 import org.springframework.core.annotation.Order;
    10 import org.springframework.stereotype.Component;
    11 
    12 /**
    13  * 
    14  * @ClassName:ValidateArgs
    15  * @Description:可以使用@Order 注解指定切面的优先级,值越小优先级越高
    16  * @author: jason_zhangz@163.com
    17  * @date:2016年12月6日下午2:14:55
    18  * 
    19  * 
    20  *
    21  */
    22 @Order(2)
    23 @Component
    24 @Aspect
    25 public class ValidateArgs {
    26     
    27     @Before("execution(* com.jason.spring.aop.impl.ArithmeticCaculator.*(..))")
    28     public void validateArgs(JoinPoint joinPoint){
    29         System.out.println("validate:" + Arrays.asList(joinPoint.getArgs()));
    30     }
    31 
    32 }
    LoggingAspect.java 
     1 package com.jason.spring.aop.impl;
     2 
     3 import java.util.Arrays;
     4 import java.util.List;
     5 
     6 import org.aspectj.lang.JoinPoint;
     7 import org.aspectj.lang.ProceedingJoinPoint;
     8 import org.aspectj.lang.annotation.After;
     9 import org.aspectj.lang.annotation.AfterReturning;
    10 import org.aspectj.lang.annotation.AfterThrowing;
    11 import org.aspectj.lang.annotation.Around;
    12 import org.aspectj.lang.annotation.Aspect;
    13 import org.aspectj.lang.annotation.Before;
    14 import org.aspectj.lang.annotation.Pointcut;
    15 import org.springframework.core.annotation.Order;
    16 import org.springframework.stereotype.Component;
    17 
    18 
    19 @Order(1)
    20 //把这个类声明为一个切面
    21 //1.需要将该类放入到IOC 容器中
    22 @Component
    23 //2.再声明为一个切面
    24 @Aspect
    25 public class LoggingAspect {
    26     
    27     /**
    28      * 
    29      * @Author:jason_zhangz@163.com
    30      * @Title: declareJointPointExpression 
    31      * @Time:2016年12月6日
    32      * @Description: 定义一个方法,用于声明切入点表达式。一般的,该方法不需要添加其他代码
    33      *
    34      */
    35     @Pointcut("execution(* com.jason.spring.aop.impl.*.*(int, int))")
    36     public void declareJointPointExpression(){}
    37     
    38     
    39     //声明该方法是一个前置通知:在目标方法开始之前执行 哪些类,哪些方法
    40     //作用:@before 当调用目标方法,而目标方法与注解声明的方法相匹配的时候,aop框架会自动的为那个方法所在的类生成一个代理对象,在目标方法执行之前,执行注解的方法
    41     //支持通配符
    42     //@Before("execution(public int com.jason.spring.aop.impl.ArithmeticCaculatorImpl.*(int, int))")
    43     @Before("declareJointPointExpression()")
    44     public void beforeMethod(JoinPoint joinPoint){
    45         String methodName = joinPoint.getSignature().getName();
    46         List<Object> args = Arrays.asList(joinPoint.getArgs());
    47         System.out.println("The method " + methodName + " begins " + args);
    48     }
    49 }

    2.重用切入点定义

        

  • 相关阅读:
    C# 关于反射事件
    SqlBulkCopy 帮助类
    【转载】FormsAuthenticationTicket 对象
    c# 安全队列
    用户离职后网盘数据交接的实现
    网盘文件被下载过的记录查询脚本(亲测有效)
    学校搭建教学资源库平台的成熟方案
    【不务正业】太空工程师自动导航v1.0 beta
    golang的sort研究
    关于golang的defer的练习
  • 原文地址:https://www.cnblogs.com/jasonHome/p/6137493.html
Copyright © 2011-2022 走看看