自定义注解 public @interface xxx
一种新的注解方式
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface Test {
}
在着当中的@interface 不是interface,是注解类
这是在jdk1.5之后加入的,java没有给它新的关键字,所以就用@interface 表示了
这个注解类,就是定义一个可用的注解,包括这个注解用于什么地方,是类,还是方法,还是property,还是方法入参等等
而其中的:
@Target:注解的作用目标
@Target(ElementType.TYPE) //接口、类、枚举、注解
@Target(ElementType.FIELD) //字段、枚举的常量
@Target(ElementType.METHOD) //方法
@Target(ElementType.PARAMETER) //方法参数
@Target(ElementType.CONSTRUCTOR) //构造函数
@Target(ElementType.LOCAL_VARIABLE)//局部变量
@Target(ElementType.ANNOTATION_TYPE)//注解
@Target(ElementType.PACKAGE) ///包
@Retention(RetentionPolicy.RUNTIME):注解会在class字节码文件中存在,在运行时可以通过反射获取到
@Retention(RetentionPolicy.SOURCE)中的SOURCE:在源文件中有效(即源文件保留)
@Retention(RetentionPolicy.CLASS)中的CLASS:在class文件中有效(即class保留,默认策略)
@Retention(RetentionPolicy.RUNTIME)中的RUNTIME:在运行时有效(即运行时保留,可以通过此级别获取注解信息)
自定义注解的简单实例:
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface ABC{
Class<?> clazz();
}
定义之后的使用:
@ABC(clazz = xxx.class)