Skip to main content

从零实现redis(3)- 拦截器(Interceptor)

·69 words·1 min
WFUing
Author
WFUing
A graduate who loves coding.
Table of Contents

代码仓库
#

https://github.com/WFUing/redis-cache/tree/release_0.0.5

背景知识
#

JAVA 中的代码生成包
#

其中,MethodInterceptor 是CGLIB提供的一个接口,用于拦截代理对象上的方法调用。intercept方法是 MethodInterceptor 接口的一部分,当代理对象上的方法被调用时,这个方法会被触发。

拦截器(Interceptor)
#

拦截器(Interceptor)是一种常用的设计模式,用于在程序的执行过程中,插入额外的操作,而不改变原有逻辑的结构。

Interceptor(拦截器)是用于实现AOP(面向切面编程)的工具之一,常用于对系统中的某些操作进行拦截并在其之前或之后加入某些处理,例如性能监控、日志记录、安全检查、事务处理、权限检查等。

注解(Annotations)
#

在Java中,注解(Annotations)是一种用于在代码中添加元数据(即关于数据的数据)的方式。Java注解可以用于类、方法、变量、参数等,提供了一种结构化的方法来描述这些元素的行为或特性。注解不直接影响程序的操作,但它们可以被编译器或运行时通过反射机制读取和处理。

注解的定义需要使用 @interface 关键字,后跟注解的名称。在定义注解时,可以使用元注解来指定注解的一些属性和行为。

元注解

  • @Target:指定注解可以应用的Java元素类型(如类、方法、字段等)。例如,@Target(ElementType.METHOD)意味着注解只能用于方法上。
  • @Retention:指定注解在哪一个级别可用,分为源代码(SOURCE)、类文件(CLASS)和运行时(RUNTIME)。例如,@Retention(RetentionPolicy.RUNTIME) 意味着注解在运行时仍然可用,这允许通过反射读取注解。
  • @Documented:指定注解是否将包含在JavaDoc中。
  • @Inherited:指定注解是否可以被子类继承。
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.lang.annotation.Inherited;

@Documented
@Target(ElementType.METHOD) // 应用于方法
@Retention(RetentionPolicy.RUNTIME) // 在运行时可用
@Inherited // 可以被子类继承
public @interface CacheInterceptor {
    // 定义属性
    boolean enabled() default true; // 默认启用
}

实现redis-cache的拦截器
#