有点长。本来应该分3个部分分别是AOP、Redis配置、限流原理及实现来写的,写的时候没收住,一股脑全顺着写下来了
什么是 AOP
(1)面向切面编程(方面),利用 AOP 可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。
(2)通俗描述:不通过修改源代码方式,在主干功能里面添加新功能
准备工作
详细的原理、底层实现的内容这里不多提,只谈实际使用。
添加maven依赖,具体version需要自己判断,我这边本地起的应用的SpringBoot2.4的
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>1.9.4</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.9.4</version>
</dependency>
创建一个我们需要使用的的注解
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
public @interface ControlStrategy {
String level() default "6";
String threshold() default "";
String strategy() default "";
String key() default "";
String switchKey() default "";
}
以及对应的切面类
@Component
@Aspect
public class ControlStrategyAspect {
}
简单说下这两部分
首先,注解部分上的元注解@Target({ElementType.METHOD, ElementType.TYPE}),表示当前注解可以作用于方法和接口或类上,@Retention(RetentionPolicy.RUNTIME)表示作用于运行时,@Inherited表示该注解对添加了该注解的类的子类同样生效
Continue reading