前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Spring AOP表达式(execution)规则——排除切点的应用

Spring AOP表达式(execution)规则——排除切点的应用

作者头像
鳄鱼儿
发布2024-05-21 15:48:56
1000
发布2024-05-21 15:48:56
举报

背景

需要项目原切面的基础上排除一些类中方法。

本篇文章主要介绍了SpringBoot AOP @Pointcut切入点表达式,以及如何排除某些类中的方法的方式。

execution(* com.winup.web.controller..*.*(..))

参数说明

符号

含义

execution()

表达式的主体;

第一个”*“符号

表示返回值的类型任意;

com.sample.service.impl

AOP所切的服务的包名

包名后面的”..“

表示当前包及子包

第二个”*“符号

*表示类名,即所有类

.*(..)

表示任何方法名,括号表示参数,两个点表示任何参数类型

AspectJ中的exection表达式

基本语法格式为: execution(<修饰符模式>?<返回类型模式><方法名模式>(<参数模式>)<异常模式>?)

  • 修饰符匹配(modifier-pattern?)
  • 返回值匹配(ret-type-pattern):可以为*,表示任何返回值,全路径的类名等
  • 类路径匹配(declaring-type-pattern?)
  • 方法名匹配(name-pattern):可以指定方法名 或者*,代表所有。
    • set*, 代表以set开头的所有方法
  • 参数匹配((param-pattern)):可以指定具体的参数类型,多个参数间用“,”隔开,各个参数也可以用“*”来表示匹配任意类型的参数
    • String表示匹配一个String参数的方法;
    • *,String 表示匹配有两个参数的方法,第一个参数可以是任意类型,而第二个参数是String类型;
    • 可以用..表示零个或多个任意参数
  • 异常类型匹配(throws-pattern?)

其中后面跟着“?”的是可选项除了返回类型模式、方法名模式和参数模式外,其它项都是可选的。

@Pointcut切入点排除某一些类或者方法不进行拦截

代码语言:javascript
复制
	// 扫描controller层
    @Pointcut("execution(* com.winup.web.controller..*.*(..)) ")
    public void runningLogPointcat() {
    }

    // 排除controller类
    @Pointcut("execution(* com.winup.web.controller.TempController.*(..)) ")
    public void excludePointcut() {
    }

    //切面配置
    @AfterReturning("runningLogPointcat() && !excludePointcut()")
    public void saveSysLog(JoinPoint joinPoint) throws IOException {
        String className = joinPoint.getSignature().getDeclaringType().getSimpleName();
	    String methodName = joinPoint.getSignature().getName();
	    logger.info("{}.{} start", className, methodName);
	}
  • runningLogPointcat:切入点为controller下所有类。
  • excludePointcut:切入点为controller下TempController类。
  • saveSysLog:切入点为满足 runningLogPointcat且不满足excludePointcut的切入点的范围
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2024-05-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 背景
    • AspectJ中的exection表达式
    • @Pointcut切入点排除某一些类或者方法不进行拦截
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档