当前位置: 首页 > news >正文

SpringAOP常用功能实现

1. 导入依赖

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId>
</dependency>

2. 核心通知

package com.example.aspect;import lombok.SneakyThrows;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.AfterThrowing;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;@Aspect
@Order(1)
@Component
public class RequestAspect {@Pointcut("execution(* com.example.controller..*(..))")public void pc() {}/*** around通知必须有返回值*/@SneakyThrows@Around("com.example.aspect.RequestAspect.pc()")public Object around(ProceedingJoinPoint joinPoint) {System.out.println("around start");Object result = joinPoint.proceed();System.out.println("around end");return result;}@Before("pc()")public void before() {System.out.println("before");}@After("pc()")public void after() {System.out.println("after");}@AfterReturning("pc()")public void afterReturning() {System.out.println("afterReturning");}@AfterThrowing("pc()")public void afterThrowing() {System.out.println("afterThrowing");}
}
around start
before
@RequestMapping
afterReturning
after
around end

3. 执行顺序

@Around joinPoint.proceed()

@Before @RequestMapping @AfterReturning/@AfterThrowing @After

@Around

4. 切点表达式

4.1 execution方法签名匹配

返回类型和异常可以省略。

execution(<访问修饰符> <返回类型> <包名.类名.⽅法(⽅法参数)> <异常>)
@Pointcut("execution(* com.example.controller..*(..))")

4.2 @annotation注解匹配

@annotation(注解路径)
@Pointcut("@annotation(org.springframework.web.bind.annotation.RequestMapping)")

4.3 @Pointcut切点表达式

@Pointcut可以定义公共切点表达式,也可以在其他切面类中使用。

@Around("com.example.aspect.RequestAspect.pc()")

 

相关文章:

SpringAOP常用功能实现

1. 导入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId> </dependency> 2. 核心通知 package com.example.aspect;import lombok.SneakyThrows; import org.aspectj.l…...

Java基础的重点知识-04-封装

文章目录 面向对象思想封装 面向对象思想 在计算机程序设计过程中&#xff0c;参照现实中事物&#xff0c;将事物的属性特征、行为特征抽象出来&#xff0c;描述成计算机事件的设计思想。 面向对象思想的三大基本特征: 封装、继承、多态 1.类和对象 类是对象的抽象&#xff…...

win7 的 vmware tools 安装失败

没有安装vmware tools的系统屏幕显示异常。桌面是比较小的图像&#xff0c;四周是黑边在 vmware 软件里 方法1&#xff0c;下补丁 https://www.catalog.update.microsoft.com/Search.aspx?qkb4474419 方法2&#xff0c;使用老版vm tools http://softwareupdate.vmware.com/c…...

【杂记-浅谈OSPF协议之IR、ABR、ASBR、BR】

OSPF协议之IR、ABR、ASBR、BR 一、 内部路由器 IR二、骨干路由器 BR三、边界路由器 ABR四、自治系统边界路由器 ASBR 一、 内部路由器 IR 概念 IR&#xff0c;Internal Router&#xff0c;即内部路由器&#xff0c;指的是所有接口都属于同一个OSPF区域的路由器。这类路由器只维…...

element 问题整合

没关系&#xff0c;凡事发生必有利于我 文章目录 一、el-table 同级数据对齐及展开图标的位置问题二、el-table 勾选框为圆角及只能勾选一个 一、el-table 同级数据对齐及展开图标的位置问题 element 官方提供的扩展tree型数据在表格里默认是靠左边对齐&#xff0c;项目需求需要…...

Linux下vi文件的时候替换指定的内容

需要将nginx.conf中的192.168.222.188&#xff0c;替换为178.21.120.225 操作步骤&#xff1a; 1、vi 文件 vi nginx.conf2、输入 :%s/192.168.222.188/178.21.120.225/g3、最后保存 :wq...

【知识学习】阐述Unity3D中MaterialTexture的概念及使用方法示例

在Unity3D中&#xff0c;Material和Texture是渲染过程中非常重要的两个概念&#xff0c;它们共同工作以实现丰富的视觉效果。 Material Material是Unity中的一个组件&#xff0c;用于定义物体表面的视觉属性。一个Material可以包含多种属性&#xff0c;如颜色、纹理、反射率等…...

java创建0byte的空文件

在Java中&#xff0c;使用File类创建一个文件通常不会自动创建一个0字节的文件&#xff0c;它只是用来表示文件系统中的一个文件或目录。如果你想要创建一个0字节的文件&#xff0c;你需要使用FileOutputStream来写入文件。以下是创建一个0字节文件的示例代码&#xff1a; imp…...

Qt 实战(6)事件 | 6.2、事件过滤器

文章目录 一、事件过滤器1、什么是事件过滤器&#xff1f;2、如何实现事件过滤器&#xff1f;3、应用示例4、总结 前言&#xff1a; 在Qt的事件处理机制中&#xff0c;事件过滤器&#xff08;Event Filter&#xff09;是一种非常强大且灵活的工具&#xff0c;它允许开发者在一个…...

【PyTorch】【机器学习】图片张量、通道分解合成和裁剪

一、导入所需库 from PIL import Image import torch import numpy as np import matplotlib.pyplot as plt二、读取图片 pic np.array(Image.open(venice-boat.jpg))上述代码解释&#xff1a;先用Image.open()方法读取jpg格式图片&#xff0c;再用np.array()方法将图片转成…...

如何提高工业交换机的电源功耗?

工业交换机的电源功耗是指在工作状态下所消耗的能量。随着工业自动化技术的发展&#xff0c;工业交换机在生产和制造领域中扮演着至关重要的角色。它们通过连接各种设备和系统&#xff0c;实现信息的传输和处理&#xff0c;提高生产效率和质量。然而&#xff0c;工业交换机的大…...

源站静态文件更新后,CDN会自动刷新吗

源站静态文件更新后&#xff0c;CDN不会自动刷新缓存&#xff0c;而是在缓存时间过期后&#xff0c;才会经由用户触发回源获取最新文件。如希望在缓存过期时间之前&#xff0c;实现CDN节点与源站静态文件同步更新&#xff0c;则需要通过CDN控制台-【刷新预取】菜单&#xff0c;…...

Token的应用场景

JWT JWT由三部分组成&#xff1a;头部&#xff08;Header&#xff09;、有效载荷&#xff08;Payload&#xff09;和签名&#xff08;Signature&#xff09;头部通常指定了Token的类型和使用的哈希算法&#xff1b;有效载荷包含了一系列的声明&#xff0c;例如用户的ID、Token…...

机器学习课程复习——奇异值分解

1. 三种奇异值分解 奇异值分解&#xff08;Singular Value Decomposition, SVD&#xff09;包含了&#xff1a; 完全奇异值分解&#xff08;Complete Singular Value Decomposition, CSVD&#xff09;紧奇异值分解&#xff08;Tight Singular Value Decomposition, TSVD&…...

Java--乐观锁

乐观锁是一种并发控制机制&#xff0c;用于处理多个事务或线程对同一数据进行并发修改的问题。它假设多个事务或线程在操作数据时不会互相干扰&#xff0c;因此不在数据上加锁&#xff0c;而是在提交数据时检查数据是否被其他事务修改过。如果数据在提交前已经被其他事务修改&a…...

静默升级oracle 11g (从11.2.0.1升级到11.2.0.4)

原文&#xff1a;https://www.cnblogs.com/daizhengyang/p/13353783.html 一个环境是oracle 11.2.0.1&#xff0c;一个环境是oracle 11.2.0.4&#xff0c;同样的数据&#xff0c;同样的sql&#xff0c;在两个版本数据库表现不一样。于是&#xff0c;干脆都统一为11.2.0.4。 但…...

什么是模型训练,如何选择合适的Batch大小

模型训练是指使用数据集对模型进行训练&#xff0c;使其能够从数据中学习到特征和模式&#xff0c;进而完成特定的任务。在深度学习领域&#xff0c;通常使用反向传播算法来训练模型&#xff0c;其中模型会根据数据集中的输入和输出&#xff0c;不断更新其参数&#xff0c;以最…...

【线上绘图网站分享】

好用的线上绘图网站分享 使用场景特点使用例子 Excalidraw 使用场景 流程图绘制、组会分享工具等&#xff1b; 特点 最重要的就是&#xff1a;免费&#xff01;&#xff01; 简单&#xff0c;快捷&#xff1a;有时候临时要画一个流程图之类的用来示意、分享知识点&#xff…...

Snipaste截图工具如何控制框线箭头的粗细程度

我们使用Snipaste截图工具的时候&#xff0c;最常用的就是框线和箭头这些功能&#xff0c;有时候感觉很粗有时候感觉太细了&#xff0c;如何解决呢&#xff1f;我们可以在使用框线或者箭头之后&#xff0c;长按1或者2来控制框线箭头的粗细程度。其中1是变细&#xff0c;2是变粗…...

GISSERVER 管理器 1.0(私有化地图离线部署)

一、 简介 QGIS现在在全世界已经成为ARCGIS的最佳代替产品,而且是开源免费的。其用户社区和产品功能都已经可以与arcgis相媲美! GISSERVER管理工具是一个零代码地图网站建站工具(私有化地图离线部署)&#xff0c;可以直接将QGIS工程转换为GIS网站&#xff08;功能类似ARCGISM…...

Java 语言特性(面试系列1)

一、面向对象编程 1. 封装&#xff08;Encapsulation&#xff09; 定义&#xff1a;将数据&#xff08;属性&#xff09;和操作数据的方法绑定在一起&#xff0c;通过访问控制符&#xff08;private、protected、public&#xff09;隐藏内部实现细节。示例&#xff1a; public …...

【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器

一.自适应梯度算法Adagrad概述 Adagrad&#xff08;Adaptive Gradient Algorithm&#xff09;是一种自适应学习率的优化算法&#xff0c;由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率&#xff0c;适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...

三维GIS开发cesium智慧地铁教程(5)Cesium相机控制

一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点&#xff1a; 路径验证&#xff1a;确保相对路径.…...

vscode(仍待补充)

写于2025 6.9 主包将加入vscode这个更权威的圈子 vscode的基本使用 侧边栏 vscode还能连接ssh&#xff1f; debug时使用的launch文件 1.task.json {"tasks": [{"type": "cppbuild","label": "C/C: gcc.exe 生成活动文件"…...

STM32F4基本定时器使用和原理详解

STM32F4基本定时器使用和原理详解 前言如何确定定时器挂载在哪条时钟线上配置及使用方法参数配置PrescalerCounter ModeCounter Periodauto-reload preloadTrigger Event Selection 中断配置生成的代码及使用方法初始化代码基本定时器触发DCA或者ADC的代码讲解中断代码定时启动…...

抖音增长新引擎:品融电商,一站式全案代运营领跑者

抖音增长新引擎&#xff1a;品融电商&#xff0c;一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中&#xff0c;品牌如何破浪前行&#xff1f;自建团队成本高、效果难控&#xff1b;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...

Cinnamon修改面板小工具图标

Cinnamon开始菜单-CSDN博客 设置模块都是做好的&#xff0c;比GNOME简单得多&#xff01; 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…...

Qt Http Server模块功能及架构

Qt Http Server 是 Qt 6.0 中引入的一个新模块&#xff0c;它提供了一个轻量级的 HTTP 服务器实现&#xff0c;主要用于构建基于 HTTP 的应用程序和服务。 功能介绍&#xff1a; 主要功能 HTTP服务器功能&#xff1a; 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...

JDK 17 新特性

#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持&#xff0c;不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的&#xff…...

Reasoning over Uncertain Text by Generative Large Language Models

https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829 1. 概述 文本中的不确定性在许多语境中传达,从日常对话到特定领域的文档(例如医学文档)(Heritage 2013;Landmark、Gulbrandsen 和 Svenevei…...