一、注解定义
注解(Annotation),可声明在class、field、method、parameter等前面,有叫它元数据的,并且它是JDK1.5才引入的特性,目前在SpringBoot等框架中被广泛使用。
二、自定义注解
使用格式:
@注解名(属性名=属性值, …)
解析注解的步骤(本质获取注解属性值):
- 获取注解定义的位置的对象Class、Method、Field
- 获取指定的注解
- 调用注解中的抽象方法获取配置的属性值
三、元注解
包括@Target、@Retention、@Documented、@Inherited、@Repeatable,下文中挑选比较常见的两个展开讲讲。
@Target作用
指明注解的使用位置,属性值如下,
* TYPE: 用在类,接口上
* FIELD:用在成员变量上
* METHOD: 用在方法上
* PARAMETER:用在参数上
* CONSTRUCTOR:用在构造方法上
* LOCAL_VARIABLE:用在局部变量上
@Retention作用
指明注解的申明周期,属性值如下,
* SOURCE:注解只存在于Java源代码中,编译生成的字节码文件中就不存在了。
* CLASS:注解存在于Java源代码、编译以后的字节码文件中,运行的时候内存中没有,默认值。
* RUNTIME:注解存在于Java源代码中、编译以后的字节码文件中、运行时内存中,程序可以通过反射获取该注解。
四、注解解析
注解的解析依赖于反射,通过反射读取注解中本身带有的信息。
例如,注解在Method上,
// 得到方法对象
Method method = clazz.getDeclaredMethod("方法名");
// 根据注解名得到方法上的注解对象
Book book = method.getAnnotation(Book.class);
其实看看较多的框架注解的使用源码,它们也逃不脱这种方式。
小结
1、注解的出现减少程序配置,替代了早期框架中的配置文件;
2、使Java代码清晰易读,并提供了很多编译期类型检查功能;