目录
介绍
Java中的注解是每个开发都会遇到的,但是如果要自定义自己的注解,则需要遵循一些基本的步骤,一般注解的开发有2个基本方法:
- 在运行期,通过反射获得当前类,方法,变量上的注解信息来实现自定义注解的功能
- 在编译期,通过Annotation Processer预编译生成想要的任何内容或者逻辑
下面将通过2个例子来说明开发一个自定义注解需要哪些步骤。首先我们将看到一个非常简单的例子,我们用这个例子来说明开发自定义annotation的一些基本步骤,我们的第二个例子将介绍自定义注解以及Annotation Processor的一些用法
一、运行期的自定义注解
在下面的例子中,我们将创建3种不同类型自定义注解,以收集所有有自定义注解的类和方法
1. Class Level Annotation
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface ClassAnnotation {
public String alias() default "";
}
2. Method Level Annotation
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface MethodAnnotation {
public String alias() default "";
}
3. Field Level Annotation
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface FieldAnnotation {
public String alias() default "";
}
@Retention
注解解释:
@Retention(RetentionPolicy.SOURCE)
: 该注解只在编译期生效,生成的class文件并不包含该注解@Retention(RetentionPolicy.CLASS)
: 该注解会被保留在class文件中,但是运行期不会生效@Retention(RetentionPolicy.RUNTIME)
: 该注解会被保留在class文件中,并且会在运行期生效
@Target
注解解释如下,这里只列举了部分@Target
类型,更多的类型请参看JavaDoc。
@Target(ElementType.TYPE)
: 该注解只能运用到Class, Interface, enum上@Target(ElementType.FIELD)
: 该注解只能运用到Field上@Target(ElementType.METHOD)
: 该注解只能运用到方法上
注解中还有一个alias
的string类型参数,缺省值是空字符串,在下一节我们将看到如何使用这个string类型的参数