今天拿SpringAOP和自定义注解的通用性开🔪

简介: SpringAOP和自定义注解的通用性

🍁 作者:知识浅谈,CSDN签约讲师,CSDN原力作者,后端领域优质创作者,热爱分享创作

💒 公众号:知识浅谈

📌 擅长领域:全栈工程师、爬虫、ACM算法

🔥  联系方式vx:zsqtcc

正菜来了🛴🛴🛴

🎈启发

SpringAOP可以帮助我们Java在不修改源代码的前提下实现功能增强,其底层实现基于Java 动态代理或者cglib。由于Spring的声明式事务注解@Transactional的启发,我们在项目中利用自定义的注解实现大量共性的需求。

🎈应用场景

需要灵活使用共性需求的地方都可以使用该方案

  • 收集上报指定关键方法的入参,执行时间,返回结果等关键信息,用作后期的调优。
  • 关键方法在幂等性的前置校验(基于本地消息表)
  • 类似于Spring-Retry模块,提供关键方法多次调用重试机制
  • 提供关键方法自定义的快速熔断,服务降级等职责
  • 关键方法在执行后的扩展行为,利如记录日志,启动其他任务等。

🎈开发过程

引入依赖📃

<!--主要是用于创建切面的使用--><dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId></dependency>

自定义注解📃

新建Spring Boot2.x工程,在pom.xml中增加aspectjweaver依赖

packagecom.example.springbootdemo.Tets;
importjava.lang.annotation.ElementType;
importjava.lang.annotation.Retention;
importjava.lang.annotation.RetentionPolicy;
importjava.lang.annotation.Target;
//注解用在方法上@Target(ElementType.METHOD)
//@Retention作用是定义被它所注解的注解保留多久额,RUNTIME运行时,就是这个注解的存活时间@Retention(RetentionPolicy.RUNTIME)
public@interfaceAnnotationTest {
}

自定义切面📃

//下边的这个注解表示当前对象是一个切面@Aspect@Component@Slf4jpublicclassMethodExporterAspect {
//关键代码3:说明切面的作用范围,任何增加@AnnotationTest的目标方法都将在执行该切面方法//@Around环绕通知,最强大的通知类型,可以控制方法入参,执行,返回结果等各方面细节@Around("@annotation(com.example.springbootdemo.Tets.AnnotationTest)") //这表示AnnotationTest注解修饰的方法使用这个自定义切面进行增强publicObjectmethodExporter(ProceedingJoinPointjoinPoint) throwsThrowable{
longtime=newDate().getTime();
//执行目标方法,获取方法返回值Objectproceed=joinPoint.proceed();
longet=newDate().getTime();
returnproceed;
    }
}

测试切面📃

@RestControllerpublicclassSampleController {
@AnnotationTest@GetMapping("/list")
publicMaplist(){
HashMap<Object, Object>map=newHashMap<>();
map.put("code","0");
returnmap;
    }
}

网络异常,图片无法展示
|

相关文章
|
开发工具 Docker 容器
Docker设置国内镜像源
Docker设置国内镜像源
18637 1
|
编译器 测试技术 开发工具
让你的 XCode 编译链接耗时减半
让你的 XCode 编译链接耗时减半
1658 0
让你的 XCode 编译链接耗时减半
|
10月前
|
机器学习/深度学习 传感器 人工智能
穹彻智能-上交大最新Nature子刊速递:解析深度学习驱动的视触觉动态重建方案
上海交大研究团队在Nature子刊发表论文,提出基于深度学习的视触觉动态重建方案,结合高密度可拉伸触觉手套与视觉-触觉联合学习框架,实现手部与物体间力量型交互的实时捕捉和重建。该方案包含1152个触觉感知单元,通过应变干扰抑制方法提高测量准确性,平均重建误差仅1.8厘米。实验结果显示,其在物体重建的准确性和鲁棒性方面优于现有方法,为虚拟现实、远程医疗等领域带来新突破。
237 32
|
9月前
|
存储 关系型数据库 分布式数据库
PolarDB 开源基础教程系列 1 架构解读
PolarDB 是阿里云研发的云原生分布式数据库,基于 PostgreSQL 开源版本,旨在解决传统数据库在大规模数据和高并发场景下的性能和扩展性问题。其主要特点包括: 1. **存储计算分离架构**:通过将计算与存储分离,实现极致弹性、共享一份数据以降低成本、透明读写分离。 2. **HTAP 架构**:支持混合事务处理和分析处理(HTAP),能够在同一系统中高效执行 OLTP 和 OLAP 查询。 3. **优化的日志复制机制**:采用只复制元数据的方式减少网络传输量,优化页面回放和 DDL 锁回放过程。 4. **并行查询与索引创建**:引入 MPP 分布式执行引擎。
399 8
|
数据可视化 Python
【Python】Python 仿真OFDM发射机、信道和接收机-实现多种调制方式
文章介绍了如何使用Python和Commpy工具包实现OFDM通信系统的仿真,包括发射机、信道和接收机的过程,并支持BPSK、QPSK、8PSK、16QAM、64QAM等多种调制方式,同时展示了导频插入、信道冲击响应、星座映射的可视化,并计算了系统的误比特率。
664 0
|
12月前
|
人工智能 Cloud Native Java
云应用开发平台CAP深度测评
云应用开发平台CAP是阿里云提供的一站式应用开发及管理平台,支持快速构建和迭代云上应用。通过丰富的Serverless + AI应用模板和先进的开发者工具,CAP帮助企业快速实现业务场景,提高研发、部署、运维效率。用户可免费试用,申请试用资格后,即可快速部署和使用。
|
存储 Docker 容器
docker中挂载数据卷到容器
【10月更文挑战第13天】
442 2
|
存储 Ubuntu 网络安全
FlatPress是一款轻量级且易于设置的博客引擎
FlatPress是一款轻量级且易于设置的博客引擎,基于PHP,无需数据库支持。其特点包括独立性、标准兼容性、文件系统存储、简单备份、丰富的插件系统、Smarty模板引擎支持的主题定制、内置评论及防垃圾邮件保护。本次实践在Ubuntu 22.04.1 LTS环境下部署FlatPress,详细介绍了环境准备、Apache2安装与配置、PHP安装、FlatPress部署及访问流程。通过简单的步骤即可搭建一个功能完备的博客系统。
178 1
|
Linux Shell 网络安全
Kickstart 自动化安装
Kickstart结合PXE技术实现Linux系统的自动化安装,适用于需批量部署一致版本的服务器场景,以减少重复劳动。通过搭建Kickstart+DHCP+NFS+TFTP+PXE架构,服务器可远程启动并下载安装配置。具体包括:配置TFTP服务以传输启动文件,设置PXE引导参数指向Kickstart脚本,利用DHCP分配IP地址。这种方式极大地提高了部署效率与一致性。
264 2
|
机器学习/深度学习 资源调度 自动驾驶
OFDM:赋能5G通信的基石
OFDM:赋能5G通信的基石
1034 3