深入理解Spring AOP注解:@DataScope与@DataSource

在Spring AOP中,注解的使用扮演着重要角色,它们可以帮助我们明确定义切面、切点和增强处理。在本文中,我们将深入探讨RuoYi框架两个自定义注解:@DataScope和@DataSource。

1. @DataScope

定义注解
首先,我们定义一个名为@DataScope的注解,用于在特定的方法上实现数据范围过滤等功能。

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface DataScope {// ...一些注解属性,例如部门过滤、用户过滤等
}

定义切面
然后,我们通过Spring AOP定义一个切面来监听这个注解

@Before("@annotation(controllerDataScope)")
public void doSomething(JoinPoint joinPoint, DataScope controllerDataScope) {// ...实现具体的业务逻辑,你可以通过controllerDataScope访问注解的属性
}

这里有两个关键点需要注意:

  • @annotation: 这是Spring AOP的一个表达式,它并非Java的注解。因此,你无法在源码中找到对应的类。
  • controllerDataScope: 这只是一个参数名,可以是任何合法的变量名。这个参数的类型是被拦截的注解类型,即@DataScope。你可以通过这个参数访问注解的属性。

2. @DataSource

定义注解
我们定义另一个名为@DataSource的注解,用于动态切换数据源。

@Target({ ElementType.METHOD, ElementType.TYPE })
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
public @interface DataSource {// ...定义注解的属性,如数据源名称等
}

定义切面
然后,我们定义一个切面来处理这个注解:

@Aspect
@Order(1)
@Component
public class DataSourceAspect
{protected Logger logger = LoggerFactory.getLogger(getClass());@Pointcut("@annotation(com.ningbo.police.common.annotation.DataSource)"+ "|| @within(com.ningbo.police.common.annotation.DataSource)")public void dsPointCut(){// 此处一般不需要填写任何内容,这个方法主要用于定义切点表达式}@Around("dsPointCut()")public Object around(ProceedingJoinPoint point) throws Throwable{// ...实现具体的业务逻辑,如动态切换数据源等}// ...其它的代码
}

在这里,我们需要注意:

  • dsPointCut(): 这个方法定义了一个切点。这个方法的主要作用是声明切点表达式,通常我们不在这个方法内部编写任何代码,即使编写了也不会被执行。
  • @annotation(com.ningbo.police.common.annotation.DataSource): 这是切点表达式的一部分,其中的com.ningbo.police.common.annotation.DataSource必须是一个完整的注解类名。这和@DataScope的切面处理中的参数名controllerDataScope有本质的区别。

希望通过本文,能帮助你对Spring AOP注解的使用有更深入的理解。如果有任何问题或者疑问,欢迎在评论区留言。

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

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

相关文章

怎么使用Netty解码自定义通信协议

网络协议的基本要素 一个完备的网络协议需要具备哪些基本要素 魔数:魔数是通信双方协商的一个暗号,通常采用固定的几个字节表示。魔数的作用是防止任何人随便向服务器的端口上发送数据。协议版本号:随着业务需求的变化,协议可能…

在opencv中,RGB转gray,gray再转RGB,为何色彩不同?

#include <opencv2/opencv.hpp>int main() {// 读取RGB图像cv::Mat rgbImage cv::imread("image.jpg");// 将RGB图像转换为灰度图像cv::Mat grayImage;cv::cvtColor(rgbImage, grayImage, cv::COLOR_RGB2GRAY);// 将灰度图像转换回RGB图像cv::Mat rgbImage2;c…

OpenCV(图像处理)-图片搜索

图片搜索 1.知识介绍2.实现流程2.1 计算特征点与描述子2.2 描述子的匹配2.3 求出单应性矩阵并画出轮廓2.4 将特征点标出 此篇博客作者仍在探索阶段&#xff0c;还有一些模糊的概念没有弄懂&#xff0c;请读者自行分辨。 1.知识介绍 Opencv进行图片搜索需要的知识有&#xff1…

Leetcode-每日一题【147.对链表进行插入排序】

题目 给定单个链表的头 head &#xff0c;使用 插入排序 对链表进行排序&#xff0c;并返回 排序后链表的头 。 插入排序 算法的步骤: 插入排序是迭代的&#xff0c;每次只移动一个元素&#xff0c;直到所有元素可以形成一个有序的输出列表。 每次迭代中&#xff0c;插入排序…

青岛大学_王卓老师【数据结构与算法】Week05_09_顺序栈的操作3_学习笔记

本文是个人学习笔记&#xff0c;素材来自青岛大学王卓老师的教学视频。 一方面用于学习记录与分享&#xff0c; 另一方面是想让更多的人看到这么好的《数据结构与算法》的学习视频。 如有侵权&#xff0c;请留言作删文处理。 课程视频链接&#xff1a; 数据结构与算法基础…

ELK搭建

ELK介绍&#xff1a; ELK是一组开源工具的缩写&#xff0c;它由Elasticsearch、Logstash和Kibana三个组件组成&#xff0c;用于处理、分析和可视化大量日志数据。 入门级ELK搭建&#xff08;无Docker环境&#xff09; 安装前准备 1.获取安装包 https://artifacts.elastic…

Objective-C 父元素和子元素的点击事件

场景&#xff1a; &#xff08;需求1&#xff09;pageA一开始是【默认模式】&#xff0c;点击父元素view&#xff08;包括【搜索】文字&#xff09;&#xff0c;进入【搜索模式】&#xff1b; &#xff08;需求2&#xff09;在pageA中&#xff0c;点击【取消】文字时&#xff…

MySQL入门

MySQL基础 1. 下载MySQL1.1 下载补丁1.2 下载MySQL1.3 确定下载路径1.4 创建配置文件1.5 初始化MySQL 2. 启动MySQL2.1临时启动2.2 制作成Windows服务2.3 连接测试2.4 配置环境变量 3. MySQL指令3.1 连接3.2 设置密码3.3 查看已有的的文件夹&#xff08;数据库&#xff09;3.4 …

Mysql DQL 学习记录

DQL&#xff0c;data query language&#xff0c;即数据查询语言&#xff0c;用来查询数据库中表的记录 1.基本查询 //查询多个字段 select 字段1&#xff0c;字段2&#xff0c;... from 表名;//查询所有字段&#xff08;扫全表&#xff0c;尽量不要使用&#xff09; select …

如何快速制作一个奶茶店小程序商城

如果你是一个奶茶店的老板&#xff0c;你可能会考虑开设一个小程序商城来增加销售渠道和提升品牌形象。那么&#xff0c;如何快速制作一个奶茶店小程序商城呢&#xff1f;下面我们将介绍一个简单的步骤供你参考。 首先&#xff0c;你需要登录乔拓云平台进入商城后台管理页面。在…

(四)Flask——配置详解

一、配置&#xff1a; Flask中的配置文件是一个flask.config.Config对象&#xff08;继承字典&#xff09;。后续会剖析源码瞅瞅。 基本方法&#xff1a; 直接设置配置项——可以直接在应用程序中设置配置项&#xff0c;而不使用配置文件或环境变量。例如&#xff0c;在应用…

用ChatGPT解析Wireshark抓取的数据包样例

用Wireshark抓取的数据包&#xff0c;常用于网络故障排查、分析和应用程序通信协议开发。其抓取的分组数据结果为底层数据&#xff0c;看起来比较困难&#xff0c;现在通过chatGPT大模型&#xff0c;可以将原始抓包信息数据提交给AI进行解析&#xff0c;本文即是进行尝试的样例…

互联网行业真的不行了吗?

文章目录 前言一、起因二、互联网真的完了吗&#xff1f;三、是不是要转行&#xff1f;四、十年磨一剑五、统一回复 前言 英雄算法联盟 - 七月集训 已经开始 16 天&#xff0c;八月算法集训 将于 08月01日 正式开始&#xff0c;目前已经提前开始报名&#xff0c;报名方式参见&a…

OpenCv之滤波器

目录 一、卷积 二、方盒滤波与均值滤波 三、高斯滤波 四、中值滤波 五、双边滤波 一、卷积 图像卷积就是卷积核在图像上按行华东遍历像素时不断的相乘求和的过程 相关知识点: 步长:就是卷积核在图像上移动的步幅.(为充分扫描图片&#xff0c;步长一般为1)padding:指在图片…

matlab学习指南(1):matlab初步入门详细介绍

&#x1f305;*&#x1f539;** φ(゜▽゜*)♪ **&#x1f539;*&#x1f305; 欢迎来到馒头侠的博客&#xff0c;该类目主要讲数学建模的知识&#xff0c;大家一起学习&#xff0c;联系最后的横幅&#xff01; 喜欢的朋友可以关注下&#xff0c;私信下次更新不迷路&#xff0…

sqlite3交叉编译

1、交叉编译sqllite3可以先从官网下载最新最新的源码进行编译。sqlite3下载sqlite3有两种版本的源代码&#xff0c;sqlite-amalgamation-3420000.zip这种是将所有的操作放到sqlite3中进行使用的。虽然官方推荐使用这种方法。但是对于嵌入式移植还是使用sqlite-autoconf-3420000…

探索基于300W-LP的3D人脸关键点检测

目录 前言一、&#xff13;D 关键点可视化二、使用步骤1.300W-LP转为YOLO数据格式2.修改数据入口3.开始训练 总结 前言 300WLP数据集提供来丰富的人脸线索&#xff0c;包括&#xff12;D或&#xff13;D的关键点信息&#xff0c;Head Angle和&#xff13;DMM的参数等&#xff…

OpenCV中的RGB与YUV转换

1 基本概念 YUV 颜色空间从模拟电视时代开始就被广泛应用于彩色图像的转换与处理。其基于一个 3x3 的矩阵&#xff0c;通过线性变换将 RGB 像素转换为一个亮度&#xff08;Luma&#xff09;分量 Y 以及两个色度&#xff08;Chroma&#xff09;分量 U 和 V。由于模拟电视存在着多…

Java如何使用Fastjson序列化和反序列化

技数未来 各种数据库等知识文章 Fastjson是阿里巴巴开源的一个高性能的JSON处理框架&#xff0c;它可以实现Java对象与JSON字符串之间的相互转换&#xff0c;支持复杂对象嵌套和泛型的序列化与反序列化。Fastjson具有以下特点&#xff1a; 1. 快速&#xff1a;Fastjson相对于…

K8s 为什么要弃用 Docker

K8s 为什么要弃用 Docker 最近在学习容器技术的过程中&#xff0c;看到有关于Kubernetes“弃用 Docker”的事情&#xff0c;担心现在学 Docker 是否还有价值&#xff0c;是否现在就应该切换到 containerd 或者是其他 runtime。 随着深入了解&#xff0c;这些疑虑的确是有些道理…