元数据管理方式:注解

注解是提供一种为程序元素设置元数据的方法

​ 1.元数据是添加到程序元素如方法/字段/类/包上的额外信息。

​ 2.注解是一种分散式的元数据的设置方式,xml是集中式的设置方式。

​ 3.注解不能直接干扰代码的运行。

注解的功能

1.作为特定的标记,告诉编译器一些信息

2.编译时动态处理,如动态生成代码

3.运行时动态处理,作为额外信息的载体,如获取注解信息。

注解分类

1.标准注解:@override/@deprecated等

2.元注解:@ Retention/@Target/@Inherited/@Document

3.自定义注解

​ 元注解:用于修饰注解的注解,通常用在注解的定义上:

​ 1.@Target: 注解的作用目标

​ 2.@ Retention:注解的生命周期

​ 3.@Document:注解是否应该包含在javaDoc 文档中

​ 4.@Inherited:是否允许子类继承该注解

java.lang.annotation.Annotation

package java.lang.annotation;

public interface Annotation {
    
    boolean equals(Object obj);

    int hashCode();

    String toString();

    Class<? extends Annotation> annotationType();
}

java.lang.annotation.Annotation 是一个接口,我们写一个测试注解看看是如何和这个接口关联起来的

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.SOURCE)
public @interface TestAnnotation {

}

javap -verbose TestAnnotation反编译后:

public interface com.tc.javabase.annotation.TestAnnotation extends java.lang.annotation.Annotation
minor version: 0
major version: 52
flags: ACC_PUBLIC, ACC_INTERFACE, ACC_ABSTRACT, ACC_ANNOTATION
Constant pool:

1 = Class #14 // com/tc/javabase/annotation/TestAnnotation

2 = Class #15 // java/lang/Object

3 = Class #16 // java/lang/annotation/Annotation

4 = Utf8 SourceFile

5 = Utf8 TestAnnotation.java

6 = Utf8 RuntimeVisibleAnnotations

7 = Utf8 Ljava/lang/annotation/Target;

8 = Utf8 value

9 = Utf8 Ljava/lang/annotation/ElementType;

10 = Utf8 METHOD

11 = Utf8 Ljava/lang/annotation/Retention;

12 = Utf8 Ljava/lang/annotation/RetentionPolicy;

13 = Utf8 SOURCE

14 = Utf8 com/tc/javabase/annotation/TestAnnotation

15 = Utf8 java/lang/Object

16 = Utf8 java/lang/annotation/Annotation

{
}
SourceFile: "TestAnnotation.java"
RuntimeVisibleAnnotations:
0: #7(#8=[e#9.#10])
1: #11(#8=e#12.#13)

posted @ 2020-08-12 15:17  张天赐的博客  阅读(264)  评论(0编辑  收藏  举报