java自定义注解

什么是注解?

注解(Annontation),Java5引入的新特性,位于java.lang.annotation包中。提供了一种安全的类似注释的机制,用来将任何的信息或元数据(metadata)与程序元素(类、方法、成员变量等)进行关联。主要用于简化代码,提高变成的效率

注解如何定义?

public @interface 注解名{}和定义接口多了一个@符号 接口: public interface 接口名
注解: public @interface 注解名

元注解:
元注解是描述注解的注解,也就是专门为自定注解发明使用的注解

  1. @Retention
    用于定义注解的生命周期,设置值在枚举类RetentionPolicy里面
参数作用
RetentionPolicy.SOURCE标记的注解仅保留在源级别中,而被编译器忽略
RetentionPolicy.CLASS标记的注解在class文件中有效,但 Java 虚拟机(JVM)会忽略
RetentionPolicy.RUNTIME标记的注解由 JVM 保留,因此运行时环境可以使用它
  1. @Documented

注解表示是否将此注解的相关信息添加到javadoc文档中,用于描述生成帮助文档时是否要保留其注解信息。

  1. @Inherited

用于描述被它修饰的注解是否具有继承性,是否可以被继承

  1. @Target

用于描述注解的使用范围,也就是注解可以用在什么地方,如果我们想要同时满足两种需求,多个参数只需要用大括号抱起来,逗号隔开就可以了

参数作用
ElementType.CONSTRUCTOR描述构造器
ElementType.FIELD描述字段
ElementType.ANNOTATION_TYPE注解类型
ElementType.PACKAGE包声明
ElementType.METHOD方法级注解
ElementType.PARAMETER方法的参数
ElementType.TYPE类的任何元素

如下,这样我们就完成了自定义注解

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD})
@Documented
public @interface Limit {
  
    String key() default "";
    
    double permitsPerSecond() ;
    
    long timeout();
    
    TimeUnit timeunit() default TimeUnit.MILLISECONDS;
}

如何去使用自定义注解完成想要的功能
1.导入Aop的依赖

<dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-aop</artifactId>
   </dependency>

2.开启Aop功能

@SpringBootApplication 
//添加此注解,启用AspectJ自动代理。它会自动检测带有@Aspect注解的类,并为其创建代理对象
 public class UserApplication {
    public static void main(String[] args) {
        SpringApplication.run(UserApplication.class, args);
    }
}

3.书写切面类

@Aspect
@Component
public class LimitAop {
  
    private final Map<String, RateLimiter> limitMap =Maps.newConcurrentMap();
    @Around("@annotation(com.***.Annotation.Limit)")
    public Object around(ProceedingJoinPoint joinPoint) throws Throwable{
          代码实现....
    }

也可以根据不同的实际开发场景,选择不同的通知类型

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值