自定义注解讲解

@Documented
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface RepeatSubmit {
    /**
     * 防重提交,支持两种,一个是方法参数,一个是令牌
     */
    enum Type {PARAM,TOKEN}
    Type limitType() default  Type.PARAM;

    /**
     * 加锁过期时间,默认是5秒
     * @return
     */
    long lockTime() default 5;}

这个Java代码段定义了一个名为RepeatSubmit的自定义注解,它用于防止方法被重复提交。下面是对这段代码的逐字解释:

  1. @Documented:

    • 这个元注解表明RepeatSubmit注解是被文档化的,即它会被包含在JavaDoc中。
  2. @Target(ElementType.METHOD):

    • 这个元注解指定了RepeatSubmit注解可以应用于方法(ElementType.METHOD)。
  3. @Retention(RetentionPolicy.RUNTIME):

    • 这个元注解指定了RepeatSubmit注解的保留策略是运行时,即注解在运行时可见,可以通过反射获取。
  4. public @interface RepeatSubmit:

    • 声明了一个名为RepeatSubmit的公共接口,它是一个注解类型。
  5. 枚举定义:

    enum Type {PARAM, TOKEN}
    
    • RepeatSubmit注解内部定义了一个名为Type的枚举类型,它有两个值:PARAMTOKEN。这表示注解支持两种防止重复提交的类型。
  6. 注解属性:

    Type limitType() default Type.PARAM;
    
    • 定义了一个名为limitType的属性,其类型为之前定义的Type枚举。这个方法默认返回Type.PARAM,表示默认情况下使用方法参数来防止重复提交。
  7. 文档注释:

    /**
     * 防重提交,支持两种,一个是方法参数,一个是令牌
     */
    
    • 这是一个文档注释,用于说明limitType属性的作用。
  8. 另一个注解属性:

    long lockTime() default 5;
    
    • 定义了另一个名为lockTime的属性,其类型为long。这个方法默认返回5,表示默认的加锁过期时间是5秒。
  9. 文档注释:

    /**
     * 加锁过期时间,默认是5秒
     * @return
     */
    
    • 这是另一个文档注释,用于说明lockTime属性的作用。

使用示例:

下面是如何使用RepeatSubmit注解的示例:

public class SomeService {

    @RepeatSubmit(limitType = RepeatSubmit.Type.TOKEN, lockTime = 10)
    public void someImportantMethod() {
        // 方法实现
    }
}

在这个示例中,someImportantMethod方法被RepeatSubmit注解标记,指定使用令牌(TOKEN)来防止重复提交,并将加锁时间设置为10秒。

通过这种方式,RepeatSubmit注解提供了一种灵活的方式来控制方法的重复提交行为,并通过默认值提供了方便的配置选项。

Java自定义注解是一种元数据(metadata)的形式,它允许我们在代码中添加自定义的标记和信息。通过定义注解,我们可以为类、方法、字段等元素添加额外的信息,这些信息可以在编译时被读取,并用于生成代码、进行静态检查、运行时处理等。 自定义注解的定义使用`@interface`关键字,类似于定义一个接口或类。注解可以包含成员变量、方法、默认值等。成员变量可以是基本类型、字符串、枚举类型、注解类型或这些类型的数组。注解的方法可以没有参数或带有参数,可以有返回值或没有返回值。 以下是一个简单的示例,展示了如何定义一个自定义注解: ```java import java.lang.annotation.*; @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) public @interface MyAnnotation { String value() default ""; int number() default 0; } ``` 在上面的示例中,我们定义了一个名为`MyAnnotation`的自定义注解。它具有一个名为`value`的成员变量,默认值为空字符串,以及一个名为`number`的成员变量,默认值为0。注解使用了`@Retention`和`@Target`注解来指定注解的保留策略和作用目标。 使用自定义注解时,我们可以在需要标记的元素上使用注解,并为其成员变量赋值。例如: ```java public class MyClass { @MyAnnotation(value = "Hello", number = 42) public void myMethod() { // ... } } ``` 在上面的示例中,我们将自定义注解`MyAnnotation`应用到`myMethod`方法上,并为其成员变量`value`和`number`赋值。 在实际应用中,我们可以利用反射机制获取注解信息,并根据注解的信息执行相应的逻辑。自定义注解在框架和库的开发中经常被使用,例如Spring框架中的`@Autowired`和JUnit测试框架中的`@Test`等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值