一、什么是注解?
注解(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代码清晰易读,并提供了很多编译期类型检查功能;