SpringBoot使用AOP控制接口访问次数以及接口幂等性

本文介绍了AOP(面向切面编程)的概念和使用场景,包括日志记录、安全控制、事务管理等。通过AOP可以实现接口访问限制和幂等性设计,防止系统过载和滥用。文章提供了具体的限流和幂等性实现示例,涉及Redis的使用,并分享了其他如日志记录的场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近跟朋友聊起接口优化…于是学习总结,记录下来。

学习目标

  • 看完这篇将会:
    • 了解AOP
    • 学会使用AOP控制接口访问以及接口幂等性
    • 掌握AOP的使用场景

AOP

AOP(Aspect-Oriented Programming,面向切面编程)是一种编程范式,它允许将横切关注点(cross-cutting concerns)从核心业务逻辑中分离出来。通过AOP,可以将这些关注点模块化,并将它们应用到多个不同的组件和对象上,从而提高代码的可重用性和可维护性。在AOP中,关注点可以被定义为切面(aspect),切面是一组跨越不同类、不同层次的关注点。通常,一个切面由切(pointcut)和通知(advice)组成。

 1. 切点:切点定义了在应用程序执行过程中哪些地方应该插入横切关注点。切点通常使用表达式来指定目标方法的选择。
 2. 通知:通知定义了在切点处执行的逻辑。在AOP中,存在以下几种类型的通知:
 3. 前置通知(Before Advice):在目标方法执行前执行的逻辑。
 4. 后置通知(After Advice):在目标方法执行后执行的逻辑,无论方法是正常返回还是抛出异常。
 5. 返回通知(After Returning Advice):在目标方法正常返回后执行的逻辑。
 6. 异常通知(After Throwing Advice):在目标方法抛出异常后执行的逻辑。
 7. 环绕通知(Around Advice):在目标方法执行前后都可以执行的逻辑。

AOP常用使用场景

 8. 日志记录:通过在关键方法或操作的前后插入日志记录的切面,可以方便地记录系统的运行情况、用户的操作行为以及异常信息等。这对于调试、错误追踪和性能分析非常有帮助。
 9. 安全控制:通过在敏感操作(如认证、权限校验)的前后插入安全控制的切面,可以实现统一的安全策略和权限控制,避免在每个方法中都进行权限验证。
 10. 事务管理:通过在业务层方法的前后插入事务管理的切面,可以实现对数据库操作的自动事务管理。在方法执行前开启事务,在方法执行后根据执行结果提交或回滚事务,从而简化事务管理的代码,并保证数据的一致性。
 11. 性能监控:通过在关键方法或操作的前后插入性能监控的切面,可以实时监控系统的性能指标,例如方法的执行时间、资源消耗等,从而找出性能瓶颈并进行优化。
 12. 异常处理:通过在方法抛出异常时插入异常处理的切面,可以实现统一的异常处理逻辑。例如,可以记录异常日志、发送告警通知或返回给用户友好的错误信息。
 13. 缓存管理:通过在方法执行前后插入缓存管理的切面,可以实现对方法返回结果的缓存。这样可以减少对底层资源的访问,提高系统的响应速度和性能。
 14. 数据校验和转换:通过在参数校验、数据转换等操作的前后插入数据校验和数据转换的切面,可以实现统一的数据处理逻辑。例如,可以在保存数据之前进行数据的合法性验证或将不同数据格式进行转换。

开发准备

  1. Java 基础开发
  2. Maven 基本使用
  3. redis 基础使用
  4. 开发依赖版本
    JDK 1.8.0 Maven 3.9.2

此项目中集成了redis,如果没有安装redis。可以自己去搜索安装教程。

项目配置

  1. pom.xml
    因为项目中用到了AOP、Redis...所以引入对应的依赖文件
			<!-- Spring Data Redis -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-data-redis</artifactId>
            </dependency>

            <!-- Redis 连接池 -->
            <dependency>
                <groupId>org.apache.commons</groupId>
                <artifactId>commons-pool2</artifactId>
            </dependency>

            <!-- Spring AOP -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-aop</artifactId>
            </dependency>
  1. application.yml
########### 项目端口号设置 ##################
server:
  port: 8080
########### Redis配置 ##################
spring:
  redis:
    host: 127.0.0.1
    port: 6379
    password: 

如果redis设置了密码,在password后面加上密码即可

访问接口限制

  1. 首先自定义一个注解(RateLimit)

                
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值