我的编程空间,编程开发者的网络收藏夹
学习永远不晚

SpringBoot中定位切点的两种常用方法

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

SpringBoot中定位切点的两种常用方法

有时候,我们使用AOP来进行放的增强,编写切面类的时候,需要定位在哪个方法上试用该切面进行增强,本片文章主要讲解两种在SpringBoot中定位切点的方法,一种是使用execution表达式的方法,一种则是利用自定义注解的方法。

接下来以一个简单的例子来讲解这两种方法的使用方式。

<==========方法执行前==========>
method();
<==========方法执行后==========>

execution 表达式

execution表达式的方式主要是在定义切点的时候,通过表达式的方式选取到所需要增强的方法。

execution表达式解读


execution(<修饰符模式>?<返回类型模式><方法名模式>(<参数模式>)<异常模式>?)

类型 解读 是否必须 示例
<修饰符模式> 表示所选的修饰符类型 public/private/...
<返回类型模式> 表示所选的返回值类型 void/int/...
<方法名模式> 表示所选的包或者方法 com.luke.service/com.luke.controller.*/...
(<参数模式>) 表示所选方法的参数 *(..) @Around("operationLog()") public Object doAround(ProceedingJoinPoint joinPoint) { Object proceed = null; try { System.out.println("方法执行前"); proceed = joinPoint.proceed(); System.out.println("方法执行后"); } catch (Throwable throwable) { throwable.printStackTrace(); } return proceed; } }

此切点的execution表达式为com.luke.springdata.controller包下的所有方法。
使用**@Around**注解表明增强的方法,并且指定切点。

测试用Controller类


@RestController
@RequestMapping("/person")
public class PersonController {

    @GetMapping("/test")
    public void test(){
        System.out.println("方法执行了");
    }
    
}

运行项目,调用该方法,查看结果。

方法执行前
方法执行了
方法执行后

自定义注解的方法

自定义注解的方式就是在需要增强的方法上面加上自定义的注解即可。

自定义注解类:


@Documented
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface Log{
    
}

这里自定义了一个注解Log,该注解只能加在方法上。
自定义切面类:


@Aspect
@Component
public class LogAspect {

    @Pointcut("@annotation(com.luke.springdata.annotation.Log)")
    public void operationLog(){}

    
    @Around("operationLog()")
    public Object doAround(ProceedingJoinPoint joinPoint) {
        Object proceed = null;
        try {
            System.out.println("方法执行前");
            proceed = joinPoint.proceed();
            System.out.println("方法执行后");
        } catch (Throwable throwable) {
            throwable.printStackTrace();
        }
        return proceed;
    }
}

这里编写的自定义个切面类,用**@Pointcut注解定义一个切面,并且这次采用@annotation(xxx)**的方式表明如果哪个方法上添加了xxx注解,则就使用该切面做增强。

同时在每个增强的方法上使用该切面,随后编写正常的方法增强逻辑即可。

测试用Controller类


@RestController
@RequestMapping("/person")
public class PersonController {

    @Log
    @GetMapping("/test")
    public void test(){
        System.out.println("方法执行了");
    }
    
}

此时在需要使用切面的方法上加入**@Log**注解,调用该方法,查看效果。

方法执行前
方法执行了
方法执行后

总结

两种方式均能实现AOP的功能,在使用上,如果某个包下面的所有方法,都需要这个切面进行增强,那么使用execution表达式的方式更方便。但如果只有部分方法需要,并且分布在不同的类中,则注解的方式更灵活。

到此这篇关于SpringBoot中定位切点的两种常用方法的文章就介绍到这了,更多相关SpringBoot 定位切点内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

SpringBoot中定位切点的两种常用方法

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

absolute定位css元素居中的两种方法

有两种方法可以使绝对定位的CSS元素居中:1. 使用transform属性:可以使用CSS的transform属性来将绝对定位的元素居中。可以通过设置元素的左右和顶部和底部的偏移值为50%,并使用transform属性的translate(
2023-09-14

vue中记录滚动条位置的两种方法

最近用Vue做移动端页面遇到一个问题,需要记住滚动条的位置,所以下面这篇文章主要给大家介绍了关于vue中记录滚动条位置的两种方法,文中给出了详细的实例,需要的朋友可以参考下
2023-01-16

两种常用的SSH Git代理设置方法

SSH Git 代理设置在使用 Git 时,如果遇到与被墙的 Git 服务器通讯问题,我们可以通过设置代理的方式解决。本文将提供两种常用的 SSH Git 代理设置方法,帮助读者顺利地使用 Git。第一种方法:设置 SSH 代理在使用 Gi
2023-10-22

比较各种快速静态定位方法的优缺点

全面比较不同快速静态定位方法的优势和劣势,需要具体代码示例在现代科技不断发展的背景下,定位技术在我们的生活中扮演着愈发重要的角色。而在定位技术中,快速静态定位方法更是备受关注。然而,不同的快速静态定位方法往往具有各自不同的优势和劣势。本文
比较各种快速静态定位方法的优缺点
2024-01-18

Pytorch中实现CPU和GPU之间的切换的两种方法

本文主要介绍了Pytorch中实现CPU和GPU之间的切换的两种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
2023-01-28

你是否熟悉这五种常见的绝对定位方法?

五种常见的绝对定位方式,你都知道吗?绝对定位是CSS中比较常用的一种定位方式,它可以让元素相对于其最近的已定位的祖先元素进行定位。在这篇文章中,我们将介绍五种常见的绝对定位方式,并提供每种方式的具体代码示例。top、right、bott
你是否熟悉这五种常见的绝对定位方法?
2024-01-23

SpringBoot 常用读取配置文件的 3 种方法!

我们在SpringBoot框架进行项目开发中该如何优雅的读取配置呢?或者说对于一些List或者Map应该如何配置呢? 本篇主要解决如下几个问题: 1、Spring Boot有哪些常用的读取配置文件方式? 1)使用 @Value 读取配置文件
2023-08-17

Android中自定义标题栏样式的两种方法

原装的Android标题栏配色比较单调,就是黑色的一坨,现在假设你的软件需要独自添加标题栏,这样不仅美观而且可以将进度条等加进去,如何实现: 方法一、在你的那张Activity中onCreate方法中加上下面代码:requestWindow
2022-06-06

Vue中使用定时器(setInterval、setTimeout)的两种方式

js中定时器有两种,一个是循环执行 setInterval,另一个是定时执行 setTimeout,这篇文章主要介绍了Vue中使用定时器 (setInterval、setTimeout)的两种方式,需要的朋友可以参考下
2023-03-19

几种常用的CSS居中方法

CSS居中的方法,是网页制作中非常基础的技术之一。无论是居中文字还是图片,都可以通过简单的CSS代码来实现。下面,我们将介绍几种常用的CSS居中方法。一、居中一个div要把一个div居中,我们可以使用以下的CSS代码:```div { width: 200px; height: 100px; margin: auto;}```其中,`width`和`heigh
2023-05-14

自动化测试:盘点Selenium页面元素定位的8种方法

前段时间因项目需要,学习Selenium进行自动测试。现在总结整理下Selenium中元素定位的方法,希望可以帮助一些有疑问的朋友。自动化测试步骤 :定位元素→操作元素→验证操作结果→记录测试结果在自动化测试过程中,测试程序通常的操作页面元
2023-06-05

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录