Java基础复习(八、注解)

八、注解(标注)

注解基础

什么是注解
注解(Annotation)是 JDK 5 以后引入的一种机制,又称标注。它的使用方法和注释基本相同,但与注释不同的是,JVM 可以通过反射的方法获取注解的内容,从而起到对修饰元素(包、类、方法、成员变量、参数以及本地变量等)起到说明和配置的功能。
用处

  • 最常用的功能 - 生成文档。比如说 JDK 中自带的 @param@return
  • 格式检查。比如说 JDK 中自带的 @override@SuppressWarnings,前者用来检查方法是不是覆盖了父类方法,后者用来忽略编译器的 warnning 提示。
  • 跟踪代码依赖性,实现替代配置文件的功能。比如 Spring-boot 中的 @Bean@Controller等等

注解的原理

注解本质是一个继承了Annotation的特殊接口,其具体实现类是 Java 运行时生成的动态代理类。而我们通过反射获取注解时,返回的是 Java 运行时生成的动态代理对象$Proxy1。通过代理对象调用自定义注解(接口)的方法,会最终调用AnnotationInvocationHandlerinvoke方法。该方法会从memberValues这个 Map 中索引出对应的值。而memberValues的来源是 Java 常量池。

一个注解其实就是一种特殊的注释,通过解析从而赋予它特殊的能力。而解析注解的方式有两种:1、编译期直接的扫描;2、运行时反射。
编译期的扫描指的是在对 Java 代码编译字节码的过程中会检测到某个类或者方法被一些注释修饰,这时它就会对于这些注解进行某些处理。
运行时反射指的是利用 JVM 通过动态代理机制生成注释的代理类,并触发方法。

posted @ 2020-05-13 20:58  LewisYoung  阅读(122)  评论(0编辑  收藏  举报