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