JAVA自定义注解

Java 注解概念:

Java 注解(Annotation)是 JDK5.0 引入的一种注释机制,一种代码级别的说明,主要给计算机看的。

注解与类、接口、枚举是在同一个层次,它可以声明在包、类、字段、方法、局部变量、方法参数等的前面,用来对这些元素进行说明,注释。

JDK内置注解:

Java 定义了一套注解,共有 7 个,3 个在 java.lang 中,剩下 4 个在 java.lang.annotation 中。

作用在代码的注解是:

  • @Override - 检查该方法是否是重写方法。如果发现其父类,或者是引用的接口中并没有该方法时,会报编译错误。
  • @Deprecated - 标记过时方法。如果使用该方法,会报编译警告。
  • @SuppressWarnings - 指示编译器去忽略注解中声明的警告。

作用在其他注解的注解(或者说 元注解)是:

  • @Retention - 描述注解被保留的阶段,是只在代码中,还是编入class文件中,或者是在运行时可以通过反射访问。
  • @Documented - 标记这些注解是否包含在用户文档中。
  • @Target - 标记这个注解应该是哪种 Java 成员。
  • @Inherited - 描述注解是否被子类继承

从 Java 7 开始,额外添加了 3 个注解:

  • @SafeVarargs - Java 7 开始支持,忽略任何使用参数为泛型变量的方法或构造函数调用产生的警告。
  • @FunctionalInterface - Java 8 开始支持,标识一个匿名函数或函数式接口。
  • @Repeatable - Java 8 开始支持,标识某注解可以在同一个声明上使用多次。

三个核心类:

  • Annotation - 所有注解都继承Annotation接口
  • ElementType - 注解种类枚举,在Target上使用,表明可以作用在什么元素上面(一个注解可以有多个ElementType)
  • RententionPolicy - 保持策枚举,在@Retention上使用,表明注解的作用范围(一个注解只能有一个RententionPolicy)

注解类反编译:

annotation架构图:

JAVA自定义注解_第1张图片

自定义注解语法格式:

注意:

  • 注解中的属性通过一个与属性名相同的方法体现,类似平时编码的get方法,且该方法返回值只能是:基本数据类型、String、枚举、注解与以上三种类型的数组
  • 如果注解定义了属性,除非使用default关键字给属性默认初始化值,否则在使用时需要给属性赋值

注解赋能:

可以通过反射或aop(本质还是反射) 的方式,使注解实现某些功能,如api日志记录或api鉴权等。

aop:

本文主要对aop的方式进行介绍,通过aop能够很简便地为注解进行赋能,其原理主要是将注解作为一个切入点,进行代码拦截,然后将需要实现的功能织入其中

程序中读取注并获取定义的属性值:

反射:

1. 获取注解定义的位置的对象 (Class,Method,Field)
2. object.getAnnotation(annotation)获取指定的注解

aop:


注意:获取注解其实就是在内存中生成了一个该注解接口的实现对象(一个POJO)

你可能感兴趣的:(java,开发语言)