文档章节

Spring学习笔记十四--Aspect切面优先级

jimyao
 jimyao
发布于 2016/03/10 22:23
字数 340
阅读 23
收藏 0
package aopa;

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;

@Order(1)
@Aspect
@Component
public class ValidAspect {

    @Before("execution(public int aopa.CalImpl.*(..))")
    public void beforMethod(JoinPoint joinPoint) {
        System.out.println("ValidAspect beforeMethod()....");
    }
}
package aopa;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;

import java.util.Arrays;
import java.util.Objects;

@Order(2)
@Aspect
@Component
public class Logging {

    /*
    //前置通知
    @Before("execution(public int aopa.CalImpl.*(..))")
    public void beforeMethod(JoinPoint joinPoint) {
        String methodName = joinPoint.getSignature().getName();
        Object[] args = joinPoint.getArgs();
        System.out.println("前置通知 " +  "MethodName : " + methodName + " Args : " + Arrays.asList(args));
    }
    //后置通知,无论该方法是否出现异常
    @After("execution(public int aopa.CalImpl.*(..))")
    public void afterMethod(JoinPoint joinPoint) {
        String methodName = joinPoint.getSignature().getName();
        Object[] args = joinPoint.getArgs();
        System.out.println("后置通知 " +  "MethodName : " + methodName + " Args : " + Arrays.asList(args));
    }

    //返回通知,可以访问方法返回值
    @AfterReturning(value = "execution(public  int aopa.CalImpl.*(..))", returning = "result")
    public void afterReturn(JoinPoint joinPoint, Object result) {
        String methodName = joinPoint.getSignature().getName();
        Object[] args = joinPoint.getArgs();
        System.out.println("后置返回通知 " +  "MethodName : " + methodName + " Args : " + Arrays.asList(args) + " result : " + result);
    }

    //出现异常时候执行的代码
    @AfterThrowing(value = "execution(public  int aopa.CalImpl.*(..))", throwing = "ex")
    public void afterThrow(JoinPoint joinPoint, Exception ex) {
        String methodName = joinPoint.getSignature().getName();
        Object[] args = joinPoint.getArgs();
        System.out.println("异常通知 " +  "MethodName : " + methodName + " Exception : " + ex);
    }
    */
    //环绕通知ProceedingJoinPoint参数,是否执行目标方法,必须有目标方法返回值,相当于动态代理
    @Around("execution(public  int aopa.CalImpl.*(..))")
    public Object aroundMethod(ProceedingJoinPoint proceedingJoinPoint) {
        Object result = null;
        String methodName = proceedingJoinPoint.getSignature().getName();
        Object[] args = proceedingJoinPoint.getArgs();
        System.out.println("AroundMethod ....");
        //执行目标方法
        try {
            //前置通知
            System.out.println("前置通知 " +  "MethodName : " + methodName + " Args : " + Arrays.asList(args));
            result = proceedingJoinPoint.proceed();
            System.out.println("后置返回通知 " + result);
        } catch (Throwable throwable) {
            throwable.printStackTrace();
            System.out.println("异常通知 " +  "MethodName : " + methodName + " Exception : " + throwable);
            throw new RuntimeException();
        }
        System.out.println("后置通知 ");
        return  result;
    }
}


© 著作权归作者所有

jimyao
粉丝 17
博文 66
码字总数 27856
作品 0
朝阳
私信 提问
《Spring Recipes》第三章笔记3:Specifying Aspect Preced...

《Spring Recipes》第三章笔记3:Specifying Aspect Precedence 问题 当在不同的切面中对同一个切入点上声明相同的通知时,就会发生通知优先级的问题。 解决方案 Spring容器提供了使用Order...

LiJIaming
2012/05/20
0
0
SpringCloud基础篇AOP之拦截优先级详解

相关文章可以查看: http://spring.hhui.top - 190301-SpringBoot基础篇AOP之基本使用姿势小结 - 190302-SpringBoot基础篇AOP之高级使用技能 前面两篇分别介绍了AOP的基本使用姿势和一些高级特...

小灰灰Blog
03/12
0
0
Spring中的AOP(七)——基于XML配置文件方式的AOP

除了前面介绍的基于JDK1.5的注解方式来定义切面,切入点和增强处理外,Spring AOP也允许直接使用XML配置文件来管理它们。在JDK1.5之前,只能使用配置文件的方式来管理,在Spring2.X后提供了一...

摆渡者
2014/03/24
0
0
Spring AOP中的Advice优先级

1 概述 当多个advice同时作用于同一个连接点(JoinPoint)时,会发生什么呢?实际上,Spring AOP遵从与AspectJ相同的优先级规则来决定advice的执行顺序。 在进入连接点前,高优先级的advice先...

勇敢的飞石
2018/01/24
0
0
《Spring Recipes》第三章笔记2:Declaring Aspects

《Spring Recipes》第三章笔记2:Declaring Aspects Spring容器支持的AspectJ注解:@Aspect,@Before,@After,@AfterReturning,@AfterThrowing,@Around。 注意:切面必须让Spring容器管理...

LiJIaming
2012/05/20
0
0

没有更多内容

加载失败,请刷新页面

加载更多

JWT学习总结

官方 https://jwt.io 英文原版 https://www.ietf.org/rfc/rfc7519.txt 或 https://tools.ietf.org/html/rfc7519 中文翻译 https://www.jianshu.com/p/10f5161dd9df 1. 概述 JSON Web Token(......

冷基
今天
4
0
AOP的学习(1)

AOP 理解AOP编程思想(面向方法、面向切面) spring AOP的概念 方面 -- 功能 目标 -- 原有方法 通知 -- 对原有方法增强的方法 连接点 -- 可以用来连接通知的地方(方法) 切入点 -- 将用来插入...

太猪-YJ
今天
4
0
一张图看懂亮度、明度、光度、光亮度、明亮度

亮度、明度、光亮度,Luminance和Brightness、lightness其实都是一个意思,只是起名字太难了。 提出一个颜色模型后,由于明度的取值与别人的不同,为了表示区别所以就另想一个词而已。 因此在...

linsk1998
昨天
11
0
Python应用:python链表示例

前言 python链表应用源码示例,需要用到python os模块方法、函数和类的应用。 首先,先简单的来了解下什么是链表?链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是...

python小白1
昨天
5
0
Source Insight加载源码

Source Insight是一个图形化的源代码查看工具(当然也可以作为编译工具)。如果一个项目的源代码较多,此工具可以很方便地查找到源代码自建的依赖关系。 1.创建工程 下图为Snort源代码的文件...

天王盖地虎626
昨天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部