注解(Annotation),可声明在class、field、method、parameter等前面,有叫它元数据的,并且它是JDK1.5才引入的特性,目前在SpringBoot等框架中被广泛使用。
使用格式:
@注解名(属性名=属性值, ...)
解析注解的步骤(本质获取注解属性值):
包括@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代码清晰易读,并提供了很多编译期类型检查功能;