JAVA annotation入门基础
什么是Annotation?
Annotation 是Java5.0引入的注解机制,它提供了一种注释程序的方法,这些注释可以在编译期,类加载期或者运行期被读取和处理。Annotation 可以看作是程序中的元数据,它提供数据给程序员,让程序员在编写程序时能够更加充分地利用Java语言的特性。Annotation 是Java语言中元数据的标准化方式。
Annotation的语法
在Java中,Annotation使用@Component这种形式来标识一个元素。Annotation与Java中的接口相似,只不过Annotation没有方法体,Annotation中的属性称为成员变量。定义一个Annotation的语法如下:
public @interface MyAnnotation {
String value() default "default value";
}
其中,@interface关键字用来定义一个注解类型,注解内部就是注解的属性,这与接口中定义方法非常相似,如上面定义的示例MyAnnotation中的value()就是一个成员变量。注解中的成员变量可以有缺省值,缺省值可以通过default关键字指定。
Annotation的使用
在Java中,我们可以使用元注解@Target和@Retention来指定Annotation的使用范围和生命周期。
@Target
@Target指定了Annotation使用的范围,它有以下取值:
- ElementType.PACKAGE 可以用在 package 上
- ElementType.TYPE 可以用在 class, interface, enum 上
- ElementType.ANNOTATION_TYPE 可以用在注解上
- ElementType.METHOD 可以用在方法上
- ElementType.CONSTRUCTOR 可以用在构造方法上
- ElementType.FIELD 可以用在字段上
- ElementType.LOCAL_VARIABLE 可以用在局部变量上
- ElementType.PARAMETER 可以用在参数上
下面是一个示例:
@Target(ElementType.TYPE)
public @interface MyTypeAnnotation {
...
}
使用@MyTypeAnnotation标注的Annotation只能用在class, interface, enum上。
@Retention
@Retention指定了Annotation的生命周期,它有以下取值:
- RetentionPolicy.SOURCE 该Annotation只在源码级别保留,编译时会被忽略
- RetentionPolicy.CLASS 该Annotation会保留到字节码中,并由类加载器加载,但运行时JVM会忽略
- RetentionPolicy.RUNTIME 该Annotation会保留到字节码中,并由类加载器加载,运行时JVM也会去处理它
下面是一个示例:
@Retention(RetentionPolicy.RUNTIME)
public @interface MyRetentionAnnotation {
...
}
使用@MyRetentionAnnotation标注的Annotation会在运行时被读取和处理。
示例一:使用Annotation标注方法
下面是一个使用Annotation标注方法的示例。在该示例中,我们使用@MyMethodAnnotation这个Annotation来标注test()方法,该方法返回值的类型是Java中的Integer类型。
public class Example {
@MyMethodAnnotation(returnType = Integer.class)
public Integer test() {
return 1;
}
}
在@MyMethodAnnotation中,我们指定了returnType这个成员变量的值应该是Integer类型,该Annotation和方法的调用如下:
Method testMethod = Example.class.getMethod("test");
MyMethodAnnotation myMethodAnnotation = testMethod.getAnnotation(MyMethodAnnotation.class);
System.out.println(myMethodAnnotation.returnType()); // 输出为:class java.lang.Integer
示例二:使用Annotation标注类
下面是一个使用Annotation标注类的示例。在该示例中,我们使用@MyClassAnnotation这个Annotation来标注MyClass类。
@MyClassAnnotation
public class MyClass {
...
}
在@MyClassAnnotation中,我们没有指定任何成员变量的值,该Annotation和类的调用如下:
MyClassAnnotation myClassAnnotation = MyClass.class.getAnnotation(MyClassAnnotation.class);
System.out.println(myClassAnnotation); // 输出为:@MyClassAnnotation
总结
以上就是Java Annotation的入门基础,我们通过示例介绍了Annotation的语法、使用、元注解@Target和@Retention,并且通过示例演示了如何使用Annotation来标注方法和类。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JAVA annotation入门基础 - Python技术站