切面AOP

1.spring的两个特性

①、IOC:将创建对象的权利交给Spring,然后开发者用的时候,从spring容器去取。

②、AOP:切面。定义一个切点,你想在方法执行之前做什么,想在切点之后做什么

i、面向切面编程的好处:可以最大可能的提高编程效率(假如要打印所有方法的入参和出参,每个方法都需要在开头和结尾写log.info,而切面可以让我们直接生成)

ii、什么时候用切面:当你觉得代码有相同点的时候

2.实现(可以用来进行限流、幂等性校验等)

①、pom引入aop的注解

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-aop</artifactId>

</dependency>

②、 自定义注解

复制代码
@Target(ElementType.METHOD) // 注解只能用于方法
@Retention(RetentionPolicy.RUNTIME) // 修饰注解的生命周期
@Documented
public @interface RepeatSubmit {

    /**
     * 防重复操作过期时间,默认1s
     */
    long expireTime() default 1;
}

③、编写aop逻辑

a、@Aspect:声明这是一个切面类(使用时需要与@Component注解一起用,表明同时将该类交给spring管理)

b、定义切点

@Around:增强处理,用于指定【advice】的类型,是Around、Before、After、AfterReturning这四种类型中能力最强的一种

@Before:用于指定【advice】的类型,表示该【advice】在切点方法之前执行

@After:用于指定【advice】的类型,表示该【advice】在切点方法之后执行

@AfterReturning:用于指定【advice】的类型,功能与@After类似,不同点是可以捕获切点方法的返回值并进行增强处理(具体咋回事也没弄懂)

@AfterThrowing:当切点方法抛出异常时会执行该【advice】

复制代码
@Slf4j
@Component
@Aspect
public class RepeatSubmitAspect {

 * 定义切点
 */
    //为设置的注解的地址
    @Pointcut("@annotation(com.example.demo.annotation.RepeatSubmit)")
    public void repeatSubmit() {}

    @Around("repeatSubmit()")
    public Object around(ProceedingJoinPoint joinPoint) throws Throwable {
        //实现逻辑
    }
相关推荐
丘山一郎3 小时前
Spring 中的IOC控制反转 和DI依赖注入
java·后端·spring
码视野3 小时前
基于 Spring Boot + Vue3 的【大学英语四六级 (CET-4/6) 作文智能评分与句式润色系统】设计与实现(含PRD/三端高保真源码/大屏)
java·前端·人工智能·spring boot·后端·vue3
MetaLite3 小时前
Spring-AOP自调用为什么失效-AopContext真能解决吗
java·后端·spring
大模型码小白3 小时前
AI 对话流性能调优:万级消息的虚拟滚动落地
java·大数据·前端·javascript·人工智能·算法·机器学习
m0_547486663 小时前
《JavaScript核心原理 》全套PPT课件2026
开发语言·javascript·ecmascript
许彰午4 小时前
14-字段级SM4加密与SM2签名
java·低代码·架构
MC皮蛋侠客4 小时前
Tauri 2.x 系列(五):调用系统 API——官方插件、Rust crate 与原生能力
开发语言·后端·rust
布莱克6054 小时前
软中断和硬中断的区别
开发语言·操作系统
whcyhhh5 小时前
头歌实践教学平台:数据科学与大数据技术导论(十二)
大数据·开发语言·python·数据清洗
许彰午5 小时前
13-describe元数据输出
java·低代码·架构·状态模式