注解 Annotation

注解,简单来说就是对代码的一种增强技术,可以在源码期间、编译期间、运行期间获取到配置的注解信息,根据这些信息可以更加方便完成我们的目标。

有关注解的一些信息都定义在 java.lang.annotation 包下面。

@Target 注解:

用这个注解来标记 我们定义的注解 可以用在什么地方。可取的值是一个ElementType 枚举类型:

不用他, 表示可以在任何地方都可以使用

@Retation 注解:

我们写的 java 文件要经历 编译生成 .class 文件, 然后让类加载器加载进虚拟机执行。

用这个注解来标记 我们定义的注解 可以存在到什么阶段。 可取的值是一个 RetationPolicy 枚举类型:

SOURCE : 存在到源码阶段。

CLASS: 存在到 字节码文件阶段,也就是到 .class 文件里。

RUNTIME : 整个阶段都存在, 在虚拟机内运行时也可以获取到。

@Inherited

作用在注解上,表示该注解可以被继承。

注意: 只能继承 类上上面的注解, 接口上面的不可以!

@Repeatable

默认情况下, 一个注解在同一个 ElementType 上只能使用一次。 如果想要使用多次,就用此注解。

注解信息的获取:

这个涉及到 AnnotationElement 接口, 表示 虚拟机中 使用的注解元素,

我们可以获取到这些元素, 拿到之后,可以利用反射技术,获取到注解里面的信息。

注解元素的一些 类图:

获取到注解信息的一些常用的方法:

Spring 中对注解的增强:

在有注解的关系继承之间, 无法通过子注解修改父注解的信息。 但是可以通过 Spring 提供的 @AliasFor 取别名做到。