SpringBoot AOP @Pointcut切入点execution表达式排除类中的具体方法

简介: SpringBoot AOP @Pointcut切入点execution表达式排除类中的具体方法

背景

工作中遇到了,要针对在原有的切面范围基础之上,排除掉某些类中的方法。所以本篇文章主要介绍了SpringBoot AOP @Pointcut切入点表达式排除某些类中的方法的方式。

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

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

示例

@Pointcut("execution(public com.lingyejun.bolg.dto.Result com.lingyejun.blog.web..*Controller.*(..))")
public void normalPointcutWeb() {
}
@Pointcut("execution(public com.lingyejun.bolg.dto.Result  com.lingyejun.blog.web.book.controller.SafeBabyController.getBabyBirth(..))")
public void excludePointcutWeb() {
}
@Pointcut("normalPointcutWeb() && !excludePointcutWeb()")
public void allPointcutWeb() {
}
@Before("allPointcutWeb()")
public void startLog(JoinPoint joinPoint) {
    String className = joinPoint.getSignature().getDeclaringType().getSimpleName();
    String methodName = joinPoint.getSignature().getName();
    logger.info("{}.{} start", className, methodName);
}

normalPointcutWeb:切入点为——以public修饰的方法、方法的返回值为com.lingyejun.bolg.dto.Result、类路径为com.lingyejun.blog.web下的所有以Controller结尾的类、携带有任意个参数的切入点。

excludePointcutWeb:切入点为——以public修饰的方法、方法的返回值为com.lingyejun.bolg.dto.Result、类路径为com.lingyejun.blog.web.book.controller.SafeBabyController、方法名为getBabyBirth、携带任意个参数的切入点。

allPointcutWeb:切入点为满足normalPointcutWeb且不满足excludePointcutWeb的切入点的范围

 

本篇文章如有帮助到您,请给「翎野君」点个赞,感谢您的支持。

目录
相关文章
|
1月前
|
存储 NoSQL Java
Spring Boot统计一个Bean中方法的调用次数
Spring Boot统计一个Bean中方法的调用次数
35 1
|
2月前
|
Java 数据库连接 Spring
SpringBoot2 | BeanDefinition 注册核心类 ImportBeanDefinitionRegistrar 源码分析 (十)
SpringBoot2 | BeanDefinition 注册核心类 ImportBeanDefinitionRegistrar 源码分析 (十)
44 0
|
2天前
|
缓存 Java Sentinel
Springboot 中使用 Redisson+AOP+自定义注解 实现访问限流与黑名单拦截
Springboot 中使用 Redisson+AOP+自定义注解 实现访问限流与黑名单拦截
|
18天前
|
存储 关系型数据库 MySQL
【mybatis-plus】Springboot+AOP+自定义注解实现多数据源操作(数据源信息存在数据库)
【mybatis-plus】Springboot+AOP+自定义注解实现多数据源操作(数据源信息存在数据库)
|
21天前
|
Java Spring
springboot单类集中定义线程池
该内容是关于Spring中异步任务的配置和使用步骤。首先,在启动类添加`@EnableAsync`注解开启异步支持。然后,自定义线程池类`EventThreadPool`,设置核心和最大线程数、存活时间等参数。接着,将线程池bean注入到Spring中,如`@Bean("RewardThreadPool")`。最后,在需要异步执行的方法上使用`@Async`注解,例如在一个定时任务类中,使用`@Scheduled(cron = "...")`和`@Async`结合实现异步定时任务。
16 2
|
1月前
|
SQL NoSQL Java
【七】springboot整合AOP实现日志操作
【七】springboot整合AOP实现日志操作
42 0
|
1月前
|
前端开发 Java API
Springboot整合Swaggar最简单方法
Springboot整合Swaggar最简单方法
28 0
|
2月前
|
Java 测试技术 开发者
探究 Spring Boot 的核心:IOC 和 AOP
Spring Boot 作为一种简化 Spring 应用开发的工具,继承了 Spring 框架的核心概念,其中最重要的是控制反转(IOC)和面向切面编程(AOP)。它们是 Spring 框架的基础,同时也深深植根于 Spring Boot 中。本文将讨论 IOC 和 AOP 的概念以及它们在 Spring Boot 中的应用。
60 4
|
2月前
|
设计模式 安全 Java
深入理解Spring Boot AOP:CGLIB代理与JDK动态代理的完全指南
深入理解Spring Boot AOP:CGLIB代理与JDK动态代理的完全指南
322 1
|
2月前
|
XML 缓存 Java
解锁Spring Boot AOP的魔力:优雅地管理交叉关注点
解锁Spring Boot AOP的魔力:优雅地管理交叉关注点
148 0