java spring boot 自定义 aop

以一个锁的加锁和释放为例

1、先定义注解

/*** 锁切面* @author fmj*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface VersionLockAOP {
}

2、然后定义切面类以及切点

/*** 切面*/
@Component
@Aspect
@Slf4j
public class VersionLockAOPAspect {/*** 之前* @param joinPoint*/@Before(value = "@annotation(com.gscloud.modules.pos.upgrade.aop.VersionLockAOP)")public void VersionLockAOPBeforePoint(JoinPoint joinPoint) {try {switch (joinPoint.getSignature().getName()) {case "saveVersion":if (!SingleUtil.SINGLE.getReentrantLockSaveVersion().tryLock(2000L, TimeUnit.MILLISECONDS)) {throw new RuntimeException("saveVersion获取锁失败");}return;case "saveVersionHistory":if (!SingleUtil.SINGLE.getReentrantLockSaveUpgrade().tryLock(2000L, TimeUnit.MILLISECONDS)) {throw new RuntimeException("saveVersionHistory获取锁失败");}return;}} catch (InterruptedException e) {throw new RuntimeException("获取锁:" + e.getMessage());}}/*** 之后* @param joinPoint*/@After(value = "@annotation(com.gscloud.modules.pos.upgrade.aop.VersionLockAOP)")public void VersionLockAOPAfterPoint(JoinPoint joinPoint) {switch (joinPoint.getSignature().getName()) {case "saveVersion":if (SingleUtil.SINGLE.getReentrantLockSaveVersion().isLocked()) {SingleUtil.SINGLE.getReentrantLockSaveVersion().unlock();}return;case "saveVersionHistory":if(SingleUtil.SINGLE.getReentrantLockSaveUpgrade().isLocked()){SingleUtil.SINGLE.getReentrantLockSaveUpgrade().unlock();}return;}}
}

3、在对应的方法上使用

执行该方法前后都会进入切点方法执行对应逻辑

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/585632.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring AOP<一>简介与基础使用

spring AOP 基础定义 含义使用切面组织多个Advice,Advice放在切面中定义。也就是说是定义通知的自定义类。自定义的AOP类Aspect连接点方法调用,异常抛出可以增强的点JoinPoint :也就是**被增强的方法的总称,可以获取具体方法的信息&#xff…

Navicat删除连接报错:service in use cannot be deleted的解决方法

我在删除连接时遇到了这个报错,内容如图。下面我介绍两种解决方法,非常简单。 第一种 右键点击想要删除的连接,先选择“关闭连接”。再选择“删除连接” 第二种 如果第一种方法无效,直接关闭Navicat软件,重新打开。然后…

【c/c++】指针例图基础详解

文章目录 指针变量内存指针详解例1例2练习&答案解析 指针变量内存 int main(){// 各类型变量占字节数printf("char: %d\n",sizeof(char)); // 1printf("short: %d\n",sizeof(short)); // 2printf("int: %d\n",sizeof(int)); // 4pri…

uniapp多级动态表单规则

最近有个新的业务、主要涉及多层级的动态表单提交,其中又涉及很多类型,踩了很多坑之后,终于研发完毕。 传来的数据格式处理 传来的数据格式涉及比较多的内容,以下举例一个,涉及到规则的填写 规则写法有两种&#xff…

算法基础之蒙德里安的梦想

蒙德里安的梦想 核心思想: 状态压缩dp 总方案 横放的方案 剩下的地方竖着放是固定的了 状态压缩 : 将每一列的图(横终点 横起点 竖) 用一个二进制数存下 向后凸的为1 反之为0 状态计算: 所有 i – 1 列 不冲突的 都加和 f[i , j] f[i - 1…

小程序域名SSL证书能否用免费的?

在小程序开发中,确保通信安全性是至关重要的一环,而SSL证书正是为此提供了有效的保障。SSL证书通过加密数据传输,防止数据被中间人恶意窃取或篡改,为用户和应用提供了更安全的通信环境。 针对小程序域名的SSL证书,通常…

【HTML5】第1章 HTML5入门

学习目标 了解网页基本概念,能够说出网页的构成以及网页相关名词的含义 熟悉Web标准,能够归纳Web标准的构成。 了解浏览器,能够说出各主流浏览器的特点。 了解HTML5技术,能够知道HTML5发展历程、优势以及浏览器对HTML5的支持情…

PINNs解麦克斯韦方程

1 问题介绍 麦克斯韦方程控制着光的传播及其与物质的相互作用。因此,利用计算电磁学模拟求解麦克斯韦方程对理解光与物质相互作用和设计光学元件起着至关重要的作用。对于线性、非磁性、各向同性材料没有电、磁电流密度的方程通常可以写成如下形式: 2 物…

C# WPF上位机开发(Web API联调)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 很多时候,客户需要开发的不仅仅是一个上位机系统,它还有其他很多配套的系统或设备,比如物流小车、立库、数字孪…

CentOS安装Maven教程-shell脚本一键安装配置

文章目录 前言一、Maven安装教程1. 确认系统环境2. 下载和解压Maven3. 配置环境变量4. 验证安装5. 设置镜像站 二、Maven安装教程(使用shell脚本一键安装配置)1. 复制脚本2. 增加执行权限3. 执行脚本4. 加载用户环境变量 总结 前言 本教程将介绍如何在C…

基于ssm的程序设计实践项目管理系统+jsp论文

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本实践项目管理系统就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的数据信息…

swift-碰到的问题

如何让工程不使用storyboard和scene 删除info.plist里面的Application Scene mainifest 删除SceneDelegate.swift 删除AppDelegate.swift里面的这两个方法 func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession…

【年度征文】回顾2023,迎接2024

转眼一年~~2023又到年底了,CSDN年度征文如约而至!不知不觉又在CSDN平台写了488篇博文,非常感谢CSDN提供的平台,同时也感谢关注和支持博主的粉丝们,在马上到来新的一年里,我会继续努力!也非常感谢…

<JavaEE> 协议格式 -- 应用层协议 HTTP

目录 一、HTTP的概念 1)什么是HTTP协议? 2)什么是超文本? 二、HTTP协议格式 三、请求(request) 1) 方法(Method) 1> GET方法 2> POST方法 3> GET和POS…

linux下docker搭建mysql8

1:环境信息 centos 7,mysql8 安装docker环境 2.创建mysql容器 2.1 拉取镜像 docker pull mysql:8.0.23 2.2 查询镜像拉取成功 docker images 2.3 创建挂载的目录文件 mkdir /usr/mysql8/conf mkdir /usr/mysql8/data ##给data文件赋予操作权限 chmod 777 /…

mfc100u.dll文件丢失了要怎么解决?修复mfc100u.dll详细指南

mfc100u.dll文件丢失了要怎么解决?首先让我们扒一扒什么是 mfc100u.dll。这玩意儿是 Microsoft Visual Studio 2010 的一部分,它就像一款程序生活中不可或缺的零件,没了它,程序肯定跑不起来。想想看,没有一个重要的零件&#xff…

DOA估计算法——迭代自适应算法(IAA)

1 简介 迭代自适应法 (Iterative Adaptive Approach,IAA)估计算法最早由美国的电气工程师和数学家Robert Schmidt和Roy A. Kuc在1986年的一篇论文"Multiple Emitter Location and Signal Parameter Estimation"中首次提出了这一算法, IAA DOA …

jQuery显示,切换,隐藏的使用练习

<!DOCTYPE html> <html> <head lang"en"><meta charset"UTF-8"><title>标题</title><style>div {width: 200px;height: 200px;background-color: red;display: none;}</style> </head> <body>…

thinkphp+vue+mysql企业车辆管理系统m117l

“企业车辆管理系统”是运用php语言和vue框架&#xff0c;以Mysql数据库为基础而发出来的。为保证我国经济的持续性发展&#xff0c;必须要让互联网信息时代在我国日益壮大&#xff0c;蓬勃发展。伴随着信息社会的飞速发展&#xff0c;企业车辆管理系统所面临的问题也一个接一个…

提升效率:使用注解实现精简而高效的Spring开发

IOC/DI注解开发 1.0 环境准备1.1 注解开发定义bean步骤1:删除原XML配置步骤2:Dao上添加注解步骤3:配置Spring的注解包扫描步骤4&#xff1a;运行程序步骤5:Service上添加注解步骤6:运行程序知识点1:Component等 1.2 纯注解开发模式1.2.1 思路分析1.2.2 实现步骤步骤1:创建配置类…