AOP和自定义注解的使用

news/2024/4/27 12:57:54/文章来源:https://blog.csdn.net/asdhls/article/details/130358278

AOP和自定义注解的使用

  • 一、AOP的使用
  • 二、自定义注解

一、AOP的使用

关于aop的详解可参考以下几篇文章。
AOP统计接口访问次数
AOP记录接口调用次数
Spring中XML配置AOP ***

对于AOP的理解:
     AOP通过代理的方式,通过预编译方式和运行期间动态代理实现程序功能的一种技术。通俗讲就是在给目标代码增加了触发器,开发人员可以控制在目标方法调用前(@Before)、抛出异常时(@AfterThrowing)、正常执行后(@AfterReturning)、最终结束(@After)、环绕通知(@Around,手动定义触发时机),在指定时机触发时织入新增代码。
    通过不改动源码的情况下,加入增强逻辑,通常是:权限控制、事务控制、日志代码、性能监控

/*** 通过AOP对数据共享/接入API进行监控统计**/
@Component
@Aspect
public class APIMonitorHandler {private final static Logger log = LoggerFactory.getLogger(APIMonitorHandler.class);@Pointcut(value = "@annotation(com.fawkes.lhcity.common.annotation.APIMonitor) || " + "execution(public void com.fawkes.lhcity.modules.digital.projectreport.controller.*.*(int, java.lang.String))")public void pointCut(){}@After(value = "pointCut()")public void doAfter(JoinPoint joinPoint) {HttpServletRequest request = ((ServletRequestAttributes) Objects.requireNonNull(RequestContextHolder.getRequestAttributes())).getRequest();//业务代码。。。}@AfterThrowing(pointcut = "pointCut()")public void doAfterThrowing(JoinPoint joinPoint) {HttpServletRequest request = ((ServletRequestAttributes) Objects.requireNonNull(RequestContextHolder.getRequestAttributes())).getRequest();log.info("接口访问失败, URI : [{}]", request.getRequestURI());}
}
  1. @PointCut中多个切点之间通过“||”进行连接。
  2. @PointCut中切点定义表达式书写格式

execution(public void com.fawkes.lhcity.modules.digital.projectreport.controller.⭐.⭐(int, java.lang.String))

  • 访问修饰符可以省略,返回值(void)可以用⭐表示,实体类和方法名可以用⭐表示代表同级所有的。参数基本类型可直接写,应用类型需要些全路径名。

二、自定义注解

自定义注解参考文章:
自定义注解详细介绍
AOP与自定义注解的配合使用 ****
对于自定义注解的理解:
    书写自定义注解,需要首先搞清楚4个元注解的含义。

@Target:注解可以使用的地方;
@Documented:是否随着java文件生成到javadoc文件中
@Retention:该注解保持的持久程度。(源码阶段,编译到Class文件阶段、运行阶段)
@Inherited:自定义注解写在父类声明处,则子类自动拥有该注解。

/** @description 标记数据权限控制的方法,该方法第一个参数必须为包含dataAuthProjectIds的实体类**/
@Target(value = ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface DataAuthority {
}

常规使用的注解,一般点明Target和Rentention。自定义注解主要是用于标记点,不会影响源代码,配合AOP可以实现无侵入代码增强。
获取注解
    获取注解,需要通过反射技术。
根据注解的位置不同,首选需要获取注释的对象(类、方法、属性等),然后获取对应的注解。详细可以参照第二篇参考文章。

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

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

相关文章

【数据库】数据库的基础知识

目录 前言 1、 查看数据库 1.1、查看所有数据库(show databases;) 1.2、创建数据库之后,查看创建的数据库的基本信息。 2、 创建数据库 2.1、直接创建数据库(create database [数据库名];) 2.2、创建数据库的时…

Pytest接口自动化测试实战演练

结合单元测试框架pytest数据驱动模型allure 目录 api: 存储测试接口conftest.py :设置前置操作目前前置操作:1、获取token并传入headers,2、获取命令行参数给到环境变量,指定运行环境commmon:存储封装的公共方法connect_mysql.p…

解决方案:Zotero实现参考文献中英文混排,将英文文献中的“等”转成“et al.”

Zotero 是一款非常实用且易于使用的参考文献管理工具,可帮助用户收集、整理和引用各种类型的文献,包括图书、期刊文章、网页等。在学术写作中起着重要作用。 但是其在中文世界中,运行起来偶尔会出现问题,这里记录一个问题及其解决…

隋唐洛阳“西宫”:上阳宫的GIS视角

隋唐洛阳城简介 营建 隋大业元年(605年),在隋炀帝的授意下,隋代著名城市设计师宇文恺,在汉魏故城以西重新选址,历时8个月,日役劳工200万,兴建新都洛阳城。 城和苑 隋唐洛阳城采用…

eBPF技术介绍

前言 eBPF起源于linux内核,它可以以砂箱程序运行在操作系统内核的特权上下文,高效,安全,易于扩展而不需要修改内核源码或者加载内核模块。 操作系统一直是实现观测,安全和网络功能的最理想的地方,因为内核的…

优思学院|精益管理的理念是什么?

作为一个企业,我们都希望拥有高效率和优异的竞争力。但是,如何才能在竞争激烈的市场中脱颖而出?这时,精益管理理念的出现可以帮助我们。 精益管理的基本概念是什么? 精益管理的核心理念是通过消除浪费来实现生产效率…

Java线程间通信方式(3)

前文了解了线程通信方式中的CountDownLatch, Condition,ReentrantLock以及CyclicBarrier,接下来我们继续了解其他的线程间通信方式。 Phaser Phaser是JDK1.7中引入的一种功能上和CycliBarrier和CountDownLatch相似的同步工具,相…

辛弃疾最经典的10首词

他,文能挥笔填词,武能上马杀敌; 他,被称为“词中之龙”, 他,一生赤子,追求收复山河; 他,是与苏轼齐名的豪放派词人; 他是辛弃疾。 辛弃疾一生怀着赤子之…

IO多路复用——select函数

1.select函数原型和fd_set结构体说明 1.1 select函数原型 ​ 使用 select 这种 IO 多路转接方式需要调用一个同名函数 select,这个函数是跨平台的,Linux、Mac、Windows 都是支持的。程序员通过调用这个函数可以委托内核帮助我们检测若干个文件描述符的…

【MCS-51】51单片机结构原理

至今为止,MCS-51系列单片机有许多种型号的产品:其中又分为普通型51(8031、8051、89S51)和增强型52(8032、8052、89S52等)。它们最大的区别在于存储器配置各有差异。下面我举例子的都是8051这一系列的单片机…

STM32-HAL-定时器(无源蜂鸣器的驱动)

文章目录 一、蜂鸣器的介绍二、常用的无源蜂鸣器的电路三、测试准备四、初始化片上外设4.1 初始化定时器4的通道2为PWM输出模式4.2 编写驱动代码4.3 Logic分析仪查看波形4.4 代码分析 一、蜂鸣器的介绍 有源蜂鸣器: 有源蜂鸣器内部有一个发声电路,也就是“源”&…

数据湖Iceberg-Hive集成Iceberg(3)

文章目录 Hive集成Iceberg环境准备Hive与Iceberg的版本对应关系如下上传jar包,拷贝到Hive的auxlib目录中修改hive-site.xml,添加配置项启动 HMS 服务启动 Hadoop 创建和管理 Catalog默认使用 HiveCatalog指定 Catalog 类型使用 HiveCatalog使用 HadoopCa…

C++学习记录——이십 map和set

文章目录 1、setmultiset 2、map3、map::operator[] 1、set vector/list/deque等是序列式容器,map,set是关联式容器。序列式容器的特点就是数据线性存放,而关联式容器的数据并不是线性,数据之间有很强的关系。 它们的底层是平衡…

在当前互联网行情下,Android想转音视频开发,会有前景吗?

前言 近年来,由于三年疫情的影响,很多公司都开始陆陆续续的在裁员,Android开发工作岗位也是,可能有些从事Android开发的朋友还没有意识到,Android开发岗位正在变少,求职者,僧多粥少&#xff0c…

视频大文件传输的演变:从“卷轴男孩”到自动化

200年前,从纽约市到英国伦敦的单程旅行需要乘坐一艘跨大西洋轮船将近三周——如果你能负担得起的话,那就是。那些不能在满是汗水、狭窄的帆船上安顿大约一个半月的人。 今天,视频专业人士能够在几小时甚至几分钟内跨越相同的物理距离传输大量…

《用于估计血压变化的光电体积描记图和心电图的特征》阅读笔记

目录 一、摘要 二、十大问题 Q1论文试图解决什么问题? Q2这是否是一个新的问题? Q3这篇文章要验证一个什么科学假设? Q4有哪些相关研究?如何归类?谁是这一课题在领域内值得关注的研究员? Q5论文中提…

微信小程序第五节——登录那些事儿(超详细的前后端完整流程)

📌 微信小程序第一节 ——自定义顶部、底部导航栏以及获取胶囊体位置信息。 📌 微信小程序第二节 —— 自定义组件 📌 微信小程序第三节 —— 页面跳转的那些事儿 📌 微信小程序第四节—— 网络请求那些事儿 😜作 …

MFC之CRect详解

2023年4月25日,周二晚上。 今天查了不少关于CRect类及其相关内容的资料,学到了不少东西,所以我决定写一篇详细的关于CRect类及其相关内容的文章,以记录今天所学。 CRect类 在 MFC 中,CRect 类表示一个矩形区域。它是…

linux 命令之 tar -czvf和 tar -xzvf

文章目录 一、概述:二、基础知识 一、概述: tar 用于linux 系统中压缩和解压 二、基础知识 tar常用命令参数说明 tar命令的czvf/xzvf参数分别代表的意义如下: -c 或–create 建立新的备份文件。 -x或–extract或–get 从备份文件中还原文件…

SparkStreaming学习之——无状态与有状态转化、遍历kafka的topic消息、WindowOperations

目录 一、状态转化 二、kafka topic A→SparkStreaming→kafka topic B (一)rdd.foreach与rdd.foreachPartition (二)案例实操1 1.需求: 2.代码实现: 3.运行结果 (三)案例实操2 1.需求: 2.代码实现: 3.运行结果 三、W…