写点什么

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

作者:知识浅谈
  • 2022 年 7 月 29 日
  • 本文字数:1159 字

    阅读完需:约 4 分钟

今天拿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@Slf4jpublic 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; }}
复制代码

测试切面📃

@RestControllerpublic class SampleController {
@AnnotationTest @GetMapping("/list") public Map list(){ HashMap<Object, Object> map = new HashMap<>(); map.put("code","0"); return map; }}
复制代码



发布于: 6 小时前阅读数: 11
用户头像

知识浅谈

关注

公众号:知识浅谈 2022.06.22 加入

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

评论

发布
暂无评论
今天拿SpringAOP和自定义注解的通用性开🔪_切面编程_知识浅谈_InfoQ写作社区