Spring Boot 项目实现 Spring AOP

【注】实现在SpringBoot项目中,同时给两个类的方法添加AOP前置通知

1、创建一个SpringBoot项目

2、创建两个目标类和方法

package com.tqazy.learn_spring_project.spring_aop;import org.springframework.stereotype.Service;/*** @ClassName SpringAopUserService* @Description 用户逻辑类* @Author 散场前的温柔* @Date 2023/8/13 19:56* @Version 1.0*/
@Service
public class SpringAopUserService {public void addUser(String userName) {System.out.println("本次新增用户:" + userName);}public void addUser() {System.out.println("本次新增用户:默认用户");}
}
package com.tqazy.learn_spring_project.spring_aop;import org.springframework.stereotype.Service;/*** @ClassName SpringAopUserService* @Description 订单逻辑类* @Author 散场前的温柔* @Date 2023/8/13 19:56* @Version 1.0*/
@Service
public class SpringAopOrderService {public void addOrder(String orderNo) {System.out.println("本次新增订单:" + orderNo);}public void addOrder() {System.out.println("本次新增订单:No0001");}
}

3、创建一个日志切面类

package com.tqazy.learn_spring_project.spring_aop;import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.stereotype.Component;/*** @ClassName LogAspect* @Description 日志切面类* @Author 散场前的温柔* @Date 2023/8/13 19:58* @Version 1.0*/
@Aspect
@Component
public class LogAspect {@Before("execution(* com.tqazy.learn_spring_project.spring_aop.*Service.add*(..))")public void before() {System.out.println("日志:添加方法开始!");}@After("execution(* com.tqazy.learn_spring_project.spring_aop.*Service.add*(..))")public void after() {System.out.println("日志:添加方法完成!");}
}

【注1】:*Service匹配SpringAopOrderServiceSpringAopUserService
【注2】:add*(..)是为了匹配方法名,* (..)是为了匹配方法的任意参数(这里的execution(后的*)

4、创建一个调用类

package com.tqazy.learn_spring_project.spring_aop;import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import javax.annotation.Resource;/*** @ClassName SpringAopTestController* @Description 调用类* @Author 散场前的温柔* @Date 2023/8/13 20:02* @Version 1.0*/
@RestController
@RequestMapping("/aop")
public class SpringAopTestController {@Resourceprivate SpringAopUserService userService;@Resourceprivate SpringAopOrderService orderService;@GetMapping("/testMethod")public void testMethod() {userService.addUser();userService.addUser("指定用户");orderService.addOrder();orderService.addOrder("No0002");}
}

5、运行项目

  • 启动项目成功
  • 浏览器访问http://localhost:8080/aop/testMethod
  • 编辑器控制台就会打印内容

在这里插入图片描述
完成实现!

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

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

相关文章

JZ40最小的K个数

题目地址:最小的K个数_牛客题霸_牛客网 题目回顾: 解题思路: 注意本题不需要去重。 最简单的方法:排序后数组顺序是由小到大的,也就是说此时数组前k个数就是我们要求的结果。 整体代码: public ArrayLi…

【Linux从入门到精通】文件I/O操作(C语言vs系统调用)

文章目录 一、C语言的文件IO相关函数操作 1、1 fopen与fclose 1、2 fwrite 1、3 fprintf与fscanf 1、4 fgets与fputs 二、系统调用相关接口 2、1 open与close 2、2 write和read 三、简易模拟实现cat指令 四、总结 🙋‍♂️ 作者:Ggggggtm 🙋‍…

MySQL多表查询

1.创建student和score表 创建score表 2.为student表和score表增加记录 向student表插入记录的INSERT语句如下: 向score表插入记录的INSERT语句如下: 1.查询student表的所有记录 2.查询student表的第2条到4条记录 3.从student表查询所有学生的学号&#…

图·c++

数据结构: 邻接矩阵,邻接表 1.图的存储方式:邻接矩阵,邻接表 1.稀疏图和稠密图 2.无向图: n n n 个点,最多 n ( n − 1 ) / 2 n(n-1)/2 n(n−1)/2 条边, 当 m m m 接近 n ( n − 1 ) / 2 …

【JVM】CPU飙高排查方案与思路

文章目录 CPU飙高排查方案与思路 CPU飙高排查方案与思路 1.使用top命令查看占用cpu的情况 2.通过top命令查看后,可以查看是哪一个进程占用cpu较高,上图所示的进程为:40940 3.查看进程中的线程信息 4.可以根据进程 id 找到有问题的线程&a…

积木报表集成前端加载js文件404

项目场景: 在集成积木报表和shiro时候: 集成积木报表,shrio,shrio是定义在另一个模块下的,供另一个启动类使用,积木报表集成shrio的时候,需要依赖存放shrio的核心包,该核心包除了存…

React构建的JS优化思路

背景 之前个人博客搭建时,发现页面加载要5s才能完成并显示 问题 React生成的JS有1.4M,对于个人博客服务器的带宽来说,压力较大,因此耗费了5S的时间 优化思路 解决React生成的JS大小,因为我用的是react-router-dom…

到 2030 年API 攻击预计将激增近 1000%

导读云原生应用程序编程接口管理公司 Kong 联合外部经济学家的最新研究预计,截至 2030 年 API 攻击将激增 996%,意味着与 API 相关的网络威胁的频率和强度都显着升级。 这项研究由 Kong 分析师和布朗大学副教授 Christopher Whaley 博士合作进行&#x…

webpack 热更新的实现原理

webpack 的热更新⼜称热替换(Hot Module Replacement),缩写为HMR。这个机制可以做到不⽤刷新浏览器⽽将新变更的模块替换掉旧的模块。 原理: ⾸先要知道 server 端和 client 端都做了处理⼯作: 在 webpack 的 watch…

docker案例复现

$uri导致的CRLF注入漏洞 前期准备dockerdocker compose 漏洞配置 前期准备 docker 要完成这样的测试,需要我们有一定的环境,也就是需要大家去安装docker 更新系统软件包: sudo yum update 安装 Docker 的依赖软件包: sudo yum …

Ubuntu 20.04(服务器版)安装 Anaconda

0、Anaconda介绍 Anaconda是一个开源的Python发行版本,包含了包括Python、Conda、科学计算库等180多个科学包及其依赖项。因此,安装了Anaconda就不用再单独安装CUDA、Python等。 CUDA,在进行深度学习的时候,需要用到GPU&#xf…

百度云盘发展历程与影响

摘要: 百度云盘作为中国领先的云存储与共享服务提供商,自其创立至今经历了多个阶段的发展与变革。本论文通过对百度云盘的历史回顾与分析,探讨了其在技术、商业模式、用户体验以及对社会的影响等方面的演变。同时,还分析了在竞争激…

Easy Rules规则引擎(1-基础篇)

目录 一、序言二、Easy Rules介绍三、定义规则(Rules)1、规则介绍2、编程式规则定义3、声明式规则定义 四、定义事实(Facts)五、定义规则引擎(Rules Engine)1、规则引擎介绍2、InferenceRulesEngine规则引擎示例(1) 定义触发条件(2) 定义规则触发后的执行行为(3) 测试用例 一、…

79. 单词搜索

题目链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 解题思路:递归回溯 首先遍历每一个board中的字符,如果该字符合word的第一个字符相等,就从这个位置进行匹配搜索,如果能够找到word&…

DataGrip 安装 与 连接MySQL数据库

DataGrip 安装 与 连接MySQL数据库 Jetbrains是著名的编程工具商业软件提供商,旗下有很多软件。包括IDE、团队开发工具、插件和微软.Net辅助工具、包括自创语言Kotlin等。我们通常用的和说的全家桶,主要就是指它的IDE套件。Jetbrains的IDE工具都支持跨平…

【算法——双指针】LeetCode 283 移动零

题目描述: 思路: (双指针) O(n)O(n)O(n) 给定一个数组 nums,要求我们将所有的 0 移动到数组的末尾,同时保持非零元素的相对顺序。 如图所示,数组nums [0,1,0,3,12],移动完成后变成nums [1,3,12,0,0] &am…

数据库信息速递 -- MariaDB 裁员后,前景不确定 (翻译)

开头还是介绍一下群,如果感兴趣polardb ,mongodb ,mysql ,postgresql ,redis 等有问题,有需求都可以加群群内有各大数据库行业大咖,CTO,可以解决你的问题。加群请加 liuaustin3微信号 ,在新加的朋友会分到3群&#xff…

Jmeter设置中文的两种方式,建议使用第二种

方案一 进入jmeter图像化界面,选择Options下的Choose Language,再选择Chinese(Simplified)。这个就是选择语言为简体中文(缺陷:这个只是在本次使用时为中文,下次打开默认还是英文的) 方案二(…

阿里云服务器是什么?阿里云服务器有什么优缺点?

阿里云服务器是什么?云服务器ECS是一种安全可靠、弹性可伸缩的云计算服务,云服务器可以降低IT成本提升运维效率,免去企业或个人前期采购IT硬件的成本,阿里云服务器让用户像使用水、电、天然气等公共资源一样便捷、高效地使用服务器…

基于CentOS 7 部署社区版Haproxy

HAProxy是法国开发者 威利塔罗(Willy Tarreau) 在2000年使用C语言开发的一个开源软件,是一款具 备高并发(一万以上)、高性能的TCP和HTTP负载均衡器,支持基于cookie的持久性,自动故障切换,支 持正则表达式及web状态统计。 目录 1…