Part1:注解的作用和意义
1.注解本没有任何意义,单独的注解就是一种注释,它需要结合其它如反射、插桩等技术才有意义
2.Java注解(Annotation)又称Java标注,是JDK1.5引入的一种注解机制。是元数据的一种形式,提供有关与程序属于程序本身的数据。注解对他它们注解的代码的操作并没有直接影响。
3.注解分为:元注解,内置注解,自定义注解
Part2:元注解
在定义注解时,注解类也能够使用其它的注解声明。在JDK1.5中提供了用来对注解类型进行注解的注解,我称之为meta-annotation,也就是元注解。
@Target注解 : 用于声明注解允许作用于哪些节点(是变量域,方法,参数等)
@Retention注解:用于保留级别
RetentionPolicy.SOURCE 标记注解仅保留在源级别中,并被编译器忽略
RetentionPolicy.CLASS 标记注解在编译时由编译器保留,但Java虚拟机会忽略
RetentionPolicy.RUNTIME 标记注解由JVM保留,因此运行时环境可以使用它
SOURCE < CLASS < RUNTIME ,即CLASS包含了SOURCE,RUMTIME 包含了SOURCE,CLASS
面试:注解生命周期:SOURCE,CLASS,RUNTIME
@Document 表示是否将我们的注解生成在JavaDoc中
@Inherited 表示子类可以继承父类注解
Part3:注解的应用场景
根据注解的保留级别不同,对注解的使用自然存在不同的场景
字节码增强:
字节码增强技术相当于是一把打开运行时JVM的要是,利用它可以动态地对运行的程序做修改,也可以跟踪JVM运行中的程序的状态。此外,我们平时使用的动态代理,AOP也与字节码增强密切相关,它们实质上还是利用各种手段生成或者修改符合规范的字节码文件。综上所述,掌握字节码增强后可以高效地定位并快速修复一些棘手的问题(如线上性能问题,方法出现不可控的出入参需要紧急加日志等问题),也可以在开发中减少冗余代码,大大提高开发 效率
参考博客:https://tech.meituan.com/2019/09/05/java-bytecode-enhancement.html