注解 Annotation
注解,简单来说就是对代码的一种增强技术,可以在源码期间、编译期间、运行期间获取到配置的注解信息,根据这些信息可以更加方便完成我们的目标。
有关注解的一些信息都定义在 java.lang.annotation 包下面。
@Target 注解:
用这个注解来标记 我们定义的注解 可以用在什么地方。可取的值是一个ElementType 枚举类型:
不用他, 表示可以在任何地方都可以使用
@Retation 注解:
我们写的 java 文件要经历 编译生成 .class 文件, 然后让类加载器加载进虚拟机执行。
用这个注解来标记 我们定义的注解 可以存在到什么阶段。 可取的值是一个 RetationPolicy 枚举类型:
SOURCE : 存在到源码阶段。
CLASS: 存在到 字节码文件阶段,也就是到 .class 文件里。
RUNTIME : 整个阶段都存在, 在虚拟机内运行时也可以获取到。
@Inherited
作用在注解上,表示该注解可以被继承。
注意: 只能继承 类上上面的注解, 接口上面的不可以!
@Repeatable
默认情况下, 一个注解在同一个 ElementType 上只能使用一次。 如果想要使用多次,就用此注解。
注解信息的获取:
这个涉及到 AnnotationElement 接口, 表示 虚拟机中 使用的注解元素,
我们可以获取到这些元素, 拿到之后,可以利用反射技术,获取到注解里面的信息。
注解元素的一些 类图:
获取到注解信息的一些常用的方法:
Spring 中对注解的增强:
在有注解的关系继承之间, 无法通过子注解修改父注解的信息。 但是可以通过 Spring 提供的 @AliasFor 取别名做到。