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

springboot中引入AOP切面编程

在Spring Boot 3.0中引入AOP的过程如下所示:

1、首先,确保已经添加了相关依赖。可以通过Maven或Gradle来管理项目的依赖。对于使用Maven构建的项目,需要将以下依赖添加到pom.xml文件中

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId>
</dependency>

2、创建切面类(Aspect)并定义切点(Pointcut)、前置通知(Before Advice)等逻辑。切面类应该被注解为@Component,这样才能被自动扫描到。在com.lingyi.mybatis.aop包下创建一个TimeCustomAspect.java的AOP类,增强方法执行的行为。

package com.lingyi.mybatis.aop;import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.stereotype.Component;import java.util.Arrays;/*** 自定义aop切面*/@Aspect
@Component
public class TimeCustomAspect {@Before("execution(* com.lingyi.mybatis.controller.*.*())") //包com.lingyi.mybatis.controller下的所有类和类中的方法都满足该AOP的条件public void beforeAdvice(){System.out.println("方法执行前.....");}@After("execution(* com.lingyi.mybatis.controller.*.*())")public  void afterAdvice(){System.out.println("方法执行后.......");}@Around("execution(* com.lingyi.mybatis.controller.*.*())")public Object recordTimeCustom(ProceedingJoinPoint pjp) throws  Throwable{long start = System.currentTimeMillis();Object result = pjp.proceed();long end = System.currentTimeMillis();String className = pjp.getTarget().getClass().getName();String method = pjp.getSignature().getName();String args = Arrays.toString(pjp.getArgs());System.out.println("类:"+className + ",方法:"+method +",参数:"+args +",执行耗时:"+ (end - start));return result;}}

3、测试,登录swagger UI界面,访问controller层某个接口。下面已/person接口为例

http://127.0.0.1:8081/swagger-ui/index.html

经过测试,编写的AOP切面编程程序生效,AOP会根据切点表达式自动进行切面处理。当符合条件的方法调用发生时,就会执行相应的通知逻辑。

4、精细化切入

为了更加精细化对指定方法进行切入,切面还可以针对某些注解进行切入,从而实现对指定方法进行增强。

在方法上添加@Loggin注解

相关文章:

  • 万界星空科技云MES,助力客户快速构建数字工厂
  • 在k8s集群中部署多nginx-ingress
  • Centos7.9或Deebian12安装K3s和k9s详细流程
  • C# OpenCvSharp DNN Gaze Estimation
  • centos7安装docker(包含yum配置阿里云镜像源)
  • ubuntu下编译obs-studio遇到的问题记录
  • 淘宝以图搜商品API调用详细步骤(apiKeysecret)
  • 农业银行RPA实践 3大典型案例分析
  • 嵌入式Linux之MX6ULL裸机开发学习笔记(IMX启动方式-启动设备的选择)
  • Redis布隆过滤器
  • 新年福利|这款价值数万的报表工具永久免费了
  • Linux 服务器安全策略技巧:使用 Bcrypt 或 Argon2 进行密码哈希
  • 网络安全试题进阶——附答案
  • MySQL 数值函数,字符串函数与多表查询
  • 驱动芯片,预计未来几年将达到605亿美元的规模
  • [NodeJS] 关于Buffer
  • 【跃迁之路】【585天】程序员高效学习方法论探索系列(实验阶段342-2018.09.13)...
  • 2017-09-12 前端日报
  • bearychat的java client
  • Druid 在有赞的实践
  • Mysql优化
  • python 装饰器(一)
  • vue从创建到完整的饿了么(18)购物车详细信息的展示与删除
  • 猴子数据域名防封接口降低小说被封的风险
  • 后端_ThinkPHP5
  • 基于web的全景—— Pannellum小试
  • 利用jquery编写加法运算验证码
  • 浅谈web中前端模板引擎的使用
  • 腾讯视频格式如何转换成mp4 将下载的qlv文件转换成mp4的方法
  • 第二十章:异步和文件I/O.(二十三)
  • ​DB-Engines 12月数据库排名: PostgreSQL有望获得「2020年度数据库」荣誉?
  • #include<初见C语言之指针(5)>
  • #大学#套接字
  • #图像处理
  • $.each()与$(selector).each()
  • (+4)2.2UML建模图
  • (2)(2.4) TerraRanger Tower/Tower EVO(360度)
  • (附源码)ssm航空客运订票系统 毕业设计 141612
  • (论文阅读31/100)Stacked hourglass networks for human pose estimation
  • (四)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (学习日记)2024.01.19
  • (循环依赖问题)学习spring的第九天
  • (转)jdk与jre的区别
  • (转)程序员疫苗:代码注入
  • .net core 6 集成和使用 mongodb
  • .NET 的静态构造函数是否线程安全?答案是肯定的!
  • .Net6使用WebSocket与前端进行通信
  • .Net调用Java编写的WebServices返回值为Null的解决方法(SoapUI工具测试有返回值)
  • .NET中使用Protobuffer 实现序列化和反序列化
  • :“Failed to access IIS metabase”解决方法
  • @Autowired @Resource @Qualifier的区别
  • @EnableAsync和@Async开始异步任务支持
  • @param注解什么意思_9000字,通俗易懂的讲解下Java注解
  • @Validated和@Valid校验参数区别
  • [BZOJ1178][Apio2009]CONVENTION会议中心