Java基础复习(八、注解)
八、注解(标注)
注解基础
什么是注解
注解(Annotation)是 JDK 5 以后引入的一种机制,又称标注。它的使用方法和注释基本相同,但与注释不同的是,JVM 可以通过反射的方法获取注解的内容,从而起到对修饰元素(包、类、方法、成员变量、参数以及本地变量等)起到说明和配置的功能。
用处
- 最常用的功能 - 生成文档。比如说 JDK 中自带的
@param
、@return
- 格式检查。比如说 JDK 中自带的
@override
、@SuppressWarnings
,前者用来检查方法是不是覆盖了父类方法,后者用来忽略编译器的 warnning 提示。 - 跟踪代码依赖性,实现替代配置文件的功能。比如 Spring-boot 中的
@Bean
、@Controller
等等
注解本质是一个继承了
Annotation
的特殊接口,其具体实现类是 Java 运行时生成的动态代理类。而我们通过反射获取注解时,返回的是 Java 运行时生成的动态代理对象$Proxy1
。通过代理对象调用自定义注解(接口)的方法,会最终调用AnnotationInvocationHandler
的invoke
方法。该方法会从memberValues
这个 Map 中索引出对应的值。而memberValues
的来源是 Java 常量池。
一个注解其实就是一种特殊的注释,通过解析从而赋予它特殊的能力。而解析注解的方式有两种:1、编译期直接的扫描;2、运行时反射。
编译期的扫描指的是在对 Java 代码编译字节码的过程中会检测到某个类或者方法被一些注释修饰,这时它就会对于这些注解进行某些处理。
运行时反射指的是利用 JVM 通过动态代理机制生成注释的代理类,并触发方法。
如需转载请联系作者和声明原文地址