注解以前用的少,最近项目中发现偶尔一用,可以使得代码更加简洁
自定义一个注解
@Documented
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Inherited
public @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的管理
总结:
这部分的源码非常短,所以这里就不列举出来,大家可以去了解一下