springboot切面应用

news2024/11/15 17:57:41

1、切面场景

无侵入的实现功能增强

2、实现

切面类的实现

需要使用注解@Aspect和Componet来实现,

环绕通知的作用在返回的student的sname后面拼接around字符串。

后置通知的作用在入参后面拼接idididdi,然后打印日志

@Aspect
@Component
public class StudentBeforeAspect {

    @Pointcut("@annotation(com.nio.annotation.StudentBeforeAopAnnotation)")
    public void studentBefortAspect(){}

    @AfterReturning(value = "studentBefortAspect()")
    public void addInfo(JoinPoint joinPoint){
        final Object[] args = joinPoint.getArgs();
        if (ObjectUtils.isNotEmpty(args)){
            for (Object arg : args) {
                if (arg instanceof String){
                    String id = String.valueOf(arg) + "idididdi";
                    System.out.println("id is " + id);
                }
            }
        }
    }

    @Around(value = "studentBefortAspect()")
    public Object addInfo(ProceedingJoinPoint proceedingJoinPoint){
        StudentInfo result = null;
        final Object[] args = proceedingJoinPoint.getArgs();
        try {
            Object proceed = proceedingJoinPoint.proceed(args);
            if (Objects.nonNull(proceed)) {
                if (proceed instanceof StudentInfo) {
                    result = (StudentInfo) proceed;
                    result.setSname(result.getSname() + "aroud");
                    return result;
                }
            }
        } catch (Throwable e) {
            throw new RuntimeException(e);
        }
        return result;
    }
}

注解的实现

自定义注解来实现切点方法的定位

@Target(ElementType.METHOD)
@Documented
@Retention(RetentionPolicy.RUNTIME)
public @interface StudentBeforeAopAnnotation {
}

切点方法

    @StudentBeforeAopAnnotation
    public StudentInfo getById(String id) {
        return studentDomainService.getById(id);
    }

运行结果

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

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

相关文章

English Learning - L3 纠音 W9 Lesson7-8 Ted Living Beyond Limits 2023.7.4 周二

朗读内容: Lesson 7-8 Day 52 - 60 句子 Ted Living Beyond Limits 23-50

使用Python爬虫和数据可视化,揭示人口大国历年人数的变迁

前言 人口大国通常在全球人口排名中位居前列,其人口数量远远超过其他国家。而印度和中国这两个国家的人口数量均已经超过14亿,而当前全球的人口总数也不过刚刚突破80亿而已,妥妥的天花板级别存在。或许是中国和印度在人口方面的表现太过“耀…

【CANopen】周立功轻松入门CANopen笔记

前言 想学习些新东西了,原本想直接学学Ethercat,但是简单看了看对象字典啥的概念一头雾水的,决定先从CANopen开始,Ethercat看着头疼。Etehrcat和CANopen有挺多类似的地方。感谢ZLG的这个入门笔记,我似乎是看懂了些&am…

非主流币波段策略

数量技术宅团队在CSDN学院推出了量化投资系列课程 欢迎有兴趣系统学习量化投资的同学,点击下方链接报名: 量化投资速成营(入门课程) Python股票量化投资 Python期货量化投资 Python数字货币量化投资 C语言CTP期货交易系统开…

数据合并--Pandas

1. 键匹配合并:merge()函数 1.1 函数功能 合并DataFrame或者命名的Series,命名的Series被视为单列的DataFrame 1.2 函数语法 pandas.merge(left, right, howinner, onNone, left_onNone, right_onNone, left_indexFalse, right_indexFalse, sortFalse, suffixes…

最长公共子序列LCA

最长连续公共子序列 题目链接:3692. 最长连续公共子序列 - AcWing题库 /*解法:定义dp[i1][j1]为以a[i]结尾的字符串和b[j]结尾的字符串的最长连续公共子序列那么对于a[i] b[j]的时候 dp[i1][j1] dp[i][j]1否则为0 其他就是细枝末节 */ #include<iostream> #include<…

【shiro】springboot整合shiro

springboot整合shiro&#xff0c;实现用户登录认证&#xff0c;权限校验及rememberMe 1.数据库准备 user 用户表 CREATE TABLE user (id bigint NOT NULL,name varchar(30) DEFAULT NULL,pwd varchar(35) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,ri…

《Java核心技术大会2023》——AIC送书第一期

共同深入探讨 Java 生态&#xff01;直播预约&#xff1a;视频号“IT阅读排行榜” 大会简介 人工智能在22年、23年的再次爆发让Python成为编程语言里最大的赢家&#xff1b;云原生的持续普及令Go、Rust等新生的语言有了进一步叫板传统技术体系的资本与底气。我们必须承认在近…

smale周报

2023.7.7 相关工作近况存在的问题展望 相关工作近况 近期仍就进行3D断层识别实验&#xff0c;实验了很多版本&#xff0c;不同的损失函数和模型&#xff0c;发现当下的效果更好。之前loss一直不正常&#xff0c;改变了之前的一些小问题&#xff0c;使模型和损失函数以及数据匹…

具备捕获 Web2 用户能力的 PoseiSwap,治理通证$POSE再度涨超 360%

Nautilus Chain 是行业内首个模块化 Layer3 架构链&#xff0c;开发者能够基于模块化进行定制化开发&#xff0c;并有望进一步推动 Web3 应用向隐私、合规等方向发展。当然&#xff0c;Nautilus Chain 的特殊之处还在于为生态用户带来丰厚的空投预期&#xff0c;据悉上线 Nauti…

Ubuntu 的移动梦醒了

老实讲&#xff0c;移动版 Ubuntu 在手机、平板上的发展自始至终可能都没有达到过 Canonical 的期望&#xff0c;既然如此&#xff0c;不再勉为其难地坚持下去&#xff0c;或许才是更加明智的做法。 时至今日&#xff0c;官方显然也意识到了这一点&#xff0c;在早些时候发布的…

EPSON机械臂控制记录

我使用的机器人型号为EPSON LS3-4013&#xff0c;在本文中记录了机械臂控制器和电脑连接&#xff0c;及电脑程序控制机械臂的完整流程。 1 USB连接电脑和机械臂 将USB连接电脑和控制器的PC插口。在EPSON RC 软件中选择 设置->电脑和控制器通信。其中默认包括USB通信&#…

标签平滑知识点

一、什么是标签平滑 标签平滑&#xff08;Label smoothing&#xff09;&#xff0c;像L1、L2和dropout一样&#xff0c;是机器学习领域的一种正则化方法&#xff0c;通常用于分类问题&#xff0c;目的是防止模型在训练时过于自信地预测标签&#xff0c;改善泛化能力差的问题。…

OK Print Watch 打印服务监控软件---Crack

O&K Print Watch 是一个服务器端打印监视器。此打印审核工具允许用户控制打印作业、纸张使用情况&#xff0c;并从打印服务器、本地、共享或网络打印机收集统计信息。使用O&K Print Watch&#xff0c;您可以根据许多不同的打印限制为用户定义打印配额。这些功能使用户能…

在Oracle VM VirtualBox 安装ubuntu-22.04.2 后打不开终端处理

1、下载ubuntu-22.04.2-desktop-amd64.iso 下载地址&#xff1a; https://cn.ubuntu.com/download/desktop2、安装 3、直接下一步即可 3、装好系统&#xff0c;发现打不开终端 解决办法&#xff1a;设置->区域与语言 查看语言和格式是否一致&#xff0c;不一致需修改。若…

sqlserver数据库命令行客户端安装

项目情况 项目上需要通过执行sql语句去更新一些功能 直接进入数据库去进行执行太麻烦&#xff0c; 对基础技术人员的要求比较高&#xff0c;执行效率低 参考资料 sqlcmd 实用工具 - SQL Server | Microsoft Learn 下载 ODBC Driver for SQL Server - ODBC Driver for SQL S…

感知机模型

1. 提出问题 问题&#xff1a;有一组训练数据集 T { ( x 1 , y 1 ) , ( x 2 , y 2 ) , … , ( x N , y N ) } T\{(x_1,y_1), (x_2,y_2), \ldots ,(x_N,y_N)\} T{(x1​,y1​),(x2​,y2​),…,(xN​,yN​)} 其中 x i ∈ X R n x_i\in\mathcal{X}R^n xi​∈XRn&#xff0c; y …

Redis【实战篇】---- UV统计

Redis【实战篇】---- UV统计 1. UV统计 - HyperLogLog2. UV统计 - 测试百万数据的统计 1. UV统计 - HyperLogLog 首先我们搞懂两个概念&#xff1a; UV&#xff1a;全称Unique Visitor&#xff0c;也叫独立访客量&#xff0c;是指通过互联网访问、浏览这个网页的自然人。1天内…

Linux信号机制

转自&#xff1a;深入理解Linux信号机制(1.0)_城中之城的博客-CSDN博客 一、信号机制概览 相信大家对信号并不陌生&#xff0c;很多人都用过kill命令或者CtrlC组合键杀死过进程&#xff0c;或者遇到过程序因为收到SIGSEGV信号而崩溃的。而对信号的基本原理&#xff0c;估计很…

DenseNet算法实战

DenseNet算法实战 文章目录 DenseNet算法实战[TOC](文章目录) 前言一、设计理念二、网络结构1.DenseNet网络结构2. DenseBlock Transition结构3. DenseBlock 非线性结构 三、代码实现1. 导入相关的包2. DenseBlock 内部结构3. DenseBlock 模块4. Transition 层5. 最后实现Dens…