自定义注解

创建Java自定义注解

创建自定义注解和创建一个接口相似,但是注解的interface关键字需要以@符号开头。我们可以为注解声明方法。我们先来看看注解的例子,然后我们将讨论他的一些特性。

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;
/*-----------------定义注解--------------------*/
@Retention(RetentionPolicy.SOURCE)//声明注释保留时长
@Target(ElementType.METHOD)//声明可以使用此注解的元素级别类型(如类、方法变量等)
@Documented//表示当标注了NeedRecord注解的对象在被javadoc生成文档时,NeedRecord注解将会被API文档记录
public @interface NeedRecord {//定义注解
    String userName() default "anonymous";//定义注解成员,同时用default声明默认值,如果不想声明默认值,去掉default部分即可
    String value() ;
}
/*------------------使用注解实例1-----------------*/
@NeedRecord("login")
public void login(){
    System.out.println("I'm zenghao ,I'm logining");
}
/*------------------使用注解实例2-----------------*/
@NeedRecord(userName = "zenghao",value = "login")
public void login(){
    System.out.println("I'm zenghao ,I'm logining");
}

四个元注解

JDK中有一些元注解,主要有@Target,@Retention,@Document,@Inherited用来修饰注解。

Target类型 描述
ElementType.TYPE 一> 应用于类、接口(包括注解类型)、枚举
ElementType.FIELD 一>应用于属性(包括枚举中的常量)
ElementType.METHOD一> 应用于方法
ElementType.PARAMETER 一>应用于方法的形参
ElementType.CONSTRUCTOR一> 应用于构造函数
ElementType.LOCAL_VARIABLE 一>应用于局部变量
ElementType.ANNOTATION_TYPE 一>应用于注解类型
ElementType.PACKAGE 一>应用于包
ElementType.TYPE_PARAMETER 一>1.8版本新增,应用于类型变量)
ElementType.TYPE_USE 一>1.8版本新增,应用于任何使用类型的语句中(例如声明语句、泛型和强制转换语句中的类型)

@Retention
表明该注解的生命周期
生命周期类型 描述
RetentionPolicy.SOURCE一> 编译时被丢弃,不包含在类文件中
RetentionPolicy.CLASS一> JVM加载时被丢弃,包含在类文件中,默认值
RetentionPolicy.RUNTIME一> 由JVM 加载,包含在类文件中,在运行时可以被获取到

@Document
表明该注解标记的元素可以被Javadoc 或类似的工具文档化

@Inherited
表明使用了@Inherited注解的注解,所标记的类的子类也会拥有这个注解

你可能感兴趣的:(自定义注解)