今天拿SpringAOP和自定义注解的通用性开🔪

举报
知识浅谈 发表于 2022/07/28 21:53:35 2022/07/28
【摘要】 SpringAOP和自定义注解的通用性分析

🍁 作者:知识浅谈,CSDN签约讲师,CSDN原力作者,后端领域优质创作者,热爱分享创作
💒 公众号:知识浅谈
📌 擅长领域:全栈工程师、爬虫、ACM算法
🔥 联系方式vx:zsqtcc

正菜来了🛴🛴🛴

🎈启发

SpringAOP可以帮助我们Java在不修改源代码的前提下实现功能增强,其底层实现基于Java 动态代理或者cglib。
由于Spring的声明式事务注解@Transactional的启发,我们在项目中利用自定义的注解实现大量共性的需求。

🎈应用场景

需要灵活使用共性需求的地方都可以使用该方案

  • 收集上报指定==关键方法==的入参,执行时间,返回结果等关键信息,用作后期的调优。
  • ==关键方法==在幂等性的前置校验(基于本地消息表)
  • 类似于Spring-Retry模块,提供关键方法多次调用重试机制
  • 提供==关键方法==自定义的快速熔断,服务降级等职责
  • ==关键方法==在执行后的扩展行为,利如记录日志,启动其他任务等。

🎈开发过程

引入依赖📃

<!--主要是用于创建切面的使用-->
<dependency>
    <groupId>org.aspectj</groupId>
    <artifactId>aspectjweaver</artifactId>
</dependency>

自定义注解📃

新建Spring Boot2.x工程,在pom.xml中增加aspectjweaver依赖

package com.example.springbootdemo.Tets;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

//注解用在方法上
@Target(ElementType.METHOD)
//@Retention作用是定义被它所注解的注解保留多久额,RUNTIME运行时,就是这个注解的存活时间
@Retention(RetentionPolicy.RUNTIME)
public @interface AnnotationTest {
	
}

自定义切面📃

//下边的这个注解表示当前对象是一个切面
@Aspect
@Component
@Slf4j
public class MethodExporterAspect {

    //关键代码3:说明切面的作用范围,任何增加@AnnotationTest的目标方法都将在执行该切面方法
    //@Around环绕通知,最强大的通知类型,可以控制方法入参,执行,返回结果等各方面细节
    @Around("@annotation(com.example.springbootdemo.Tets.AnnotationTest)") //这表示AnnotationTest注解修饰的方法使用这个自定义切面进行增强
    public Object methodExporter(ProceedingJoinPoint joinPoint) throws  Throwable{

        long time = new Date().getTime();
        
        //执行目标方法,获取方法返回值
        Object proceed = joinPoint.proceed();
        
        long et = new Date().getTime();
        return proceed;
    }
}

测试切面📃

@RestController
public class SampleController {

    @AnnotationTest
    @GetMapping("/list")
    public Map list(){
        HashMap<Object, Object> map = new HashMap<>();
        map.put("code","0");
        return map;
    }
}

image.png

🎈==靓文推荐==🎈
🚀分布式ID的常用解决方案-一把拿下🚀
🚀Mysql主从同步及主从同步延迟解决方案🚀

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。