java 注解的使用

契机

一直以来做spingboot项目开发的时候,springboot的自定义注解用起来很是方便,但是对注解背后的原理总是懵懵懂懂的,知其然不知其所以然。这次借着做作业的机会,决定探究一下注解的原理和如何自定义注解,好好满足一下自己的好奇心。

适用范围

JDK 1.8

什么是注解?

Java 注解(Annotation)又称 Java 标注,是 JDK5.0 引入的一种注释机制。一些情况下,我们可以通过反射机制来获取标注的内容。通常来说,注解不影响代码的执行,但是极少数情况下我们可以利用注解来影响代码的执行。

元注解

有一类注解比较特殊。它们是用来注解的注解,或者说,用来标注其他注解。在JDK1.8中,这些注解有五个,称为元注解

功能表
元注解 功能
@Retention 该元注解用于标注其他注解的生命周期。注解可以存在于源码(编译)、字节码(类加载)或JVM(运行)中
@Target 该元注解用于标注其他注解可标注的类型。例如接口、类、枚举、注解、属性字段、枚举常量、方法、方法参数、构造函数、泛型甚至是包
@Documented 该元注解用于将注解中的元素包含到 Javadoc 中
@Inherited 一个被@Inherited标注了的注解修饰了一个父类,如果他的子类没有被其他注解修饰,则它的子类也继承了父类的注解。
@Repeatable 该元注解标注的注解可以同时作用一个对象多次,但是每次作用时又可以代表不同的含义。
可选参数
元注解 可能的参数
@Retention RetentionPolicy.SOURCERetentionPolicy.CLASSRetentionPolicy.RUNTIME
@Target ElementType.TYPE(接口、类、枚举、注解),ElementType.FIELD(属性字段、枚举常量),ElementType.METHOD(方法),ElementType.PARAMETER(方法参数),ElementType.CONSTRUCTOR(构造函数),ElementType.LOCAL_VARIABLE(局部变量),ElementType.ANNOTATION_TYPE(注解),ElementType.PACKAGE(包),ElementType.TYPE_PARAMETER(泛型,即泛型方法、泛型类、泛型接口),ElementType.TYPE_USE(除了class以外的任意类型)

示例

//自定义注解timeLimit
//Retention注解用于标明自定义注解的生命周期。当其值为RetentionPolicy.RUNTIME时,自定义注解在运行阶段仍存在于虚拟机中,可以通过反射机制来读取其中内容
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)//Target注解用于标明自定义注解可标注的类型。其值为ElementType.METHOD时,自定义注解可标注于方法上
@interface timeLimit{
    int value() default 0;
}
posted @ 2020-10-17 20:42  SemiprimeNumber  阅读(120)  评论(0编辑  收藏  举报