注解 java.lang.annotation.* 详解
注解以前用的少,最近项目中发现偶尔一用,可以使得代码更加简洁
?
自定义一个注解
?
?
@Documented@Target(ElementType.METHOD)@Retention(RetentionPolicy.RUNTIME)@Inheritedpublic @interface TestAnnotation {public int value() default 1;}
对这些一一解释一下:
?
1.Documented.java?
表示这一类型的注释将通过 javadoc 和类似的默认工具进行文档化
?
2.Target .java
注解适用的目标类型,如果不注明,表示适用于各种类型
包括ElementType.java中定义的以下类型
?
TYPE - 类,接口(包括注解类型),枚举定义FIELD - 字段定义(包括枚举常量)METHOD - 方法定义,PARAMETER - 参数定义,CONSTRUCTOR - 构造函数,LOCAL_VARIABLE - 本地变量,ANNOTATION_TYPE - 注解类型PACKAGE - 包定义?
3.Retention.java
注解持续的范围,包括RetentionPolicy.java定义的
?
SOURCE - 会被编译器忽略CLASS - 注解会被编译器记录在类文件中,在运行时不需要保持。这是缺省的保存方式RUNTIME - 注解会被编译器记录在类文件中,并且在运行时保持,因此可以通过反射获得?
4.Inherited.java
注释类型被子类自动继承。也就是当我查询一个类是否有某种Annotation时,如果该类不存在,自动查找该父类是否有该Annotation
?
5.在注解里面就可以定义各种属性了,每种属性还可以定义缺省值default
?
6.使用注解更简单了
@TestAnnotation(value=2)
public static void method(){
}
?
7.之后我们就可以通过反射去访问该注解了
TestAnnotation anno = method.getAnnotation(TestAnnotation.class);
anno.id();
?
8.注解的用途
注解一般适用于各种配置和标记,例如spring等框架通过注解类来实现bean的管理
?
总结:
?
这部分的源码非常短,所以这里就不列举出来,大家可以去了解一下