当前位置: 首页 > news >正文

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.lryc.cn/news/127025.html

相关文章:

  • Baumer工业相机堡盟工业相机如何通过BGAPISDK设置相机的固定帧率(C#)
  • js拼接字符串
  • 神经网络基础-神经网络补充概念-37-其他正则化方法
  • 掌握Python的X篇_36_定义类、名称空间
  • 回归预测 | MATLAB实现GRU门控循环单元多输入多输出
  • 数据结构--拓扑排序
  • 算法竞赛备赛之搜索与图论训练提升,暑期集训营培训
  • Linux驱动入门(6.2)按键驱动和LED驱动 --- 将逻辑电平与物理电平分离
  • CentOS系统环境搭建(十四)——CentOS7.9安装elasticsearch-head
  • 设计HTML5图像和多媒体
  • 基于YOLOv8模型和Caltech数据集的行人检测系统(PyTorch+Pyside6+YOLOv8模型)
  • Flutter 宽高自适应
  • LeetCode 0833. 字符串中的查找与替换
  • Redis对象和五种常用数据类型
  • 常用的Elasticsearch查询DSL
  • 计算机网络笔记
  • 高效反编译luac文件
  • 密码湘军,融合创新!麒麟信安参展2023商用密码大会,铸牢数据安全坚固堡垒
  • 关于视频监控平台EasyCVR视频汇聚平台建设“明厨亮灶”具体实施方案以及应用
  • 区块链系统探索之路:私钥的压缩和WIF格式详解
  • DiffusionDet: Diffusion Model for Object Detection
  • CH01_重构、第一个示例
  • 学习篇之React Fiber概念及原理
  • 商城-学习整理-高级-全文检索-ES(九)
  • 无人机跟随一维高度避障场景--逻辑分析
  • Android Studio Giraffe控制台乱码
  • 云原生 envoy xDS 动态配置 java控制平面开发 支持restful grpc实现 EDS 动态endpoint配置
  • Linux--实用指令与方法(部分)
  • 常见期权策略类型有哪些?
  • tomcat服务七层搭建动态页面查看