何为Annotation
- Class的概念
- Class是Java类的说明书
- 你(通过反射)或者JVM阅读该说明书,创建类的实例
- 注解就是说明书中的一小段信息/文本/标记
- 可以携带参数
- 可以在运行时被阅读
- 一个简单的注解
```java package com.github.hcsp.generics;
public @interface MyAnnotation { }
<a name="qHuRS"></a>
## 原注解
- 注解上方的注解
```java
import java.lang.annotation.ElementType;
import java.lang.annotation.Target;
// 只允许注解添加在方法和字段上
@Target({ElementType.METHOD, ElementType.FIELD})
public @interface MyAnnotation {
}
- 可设置注解是否在字节码中保留 ```java import java.lang.annotation.ElementType; import java.lang.annotation.Target;
// 只允许注解添加在方法和字段上 @Target({ElementType.METHOD, ElementType.FIELD}) // 注解会被编译器丢弃 @Retention(RetentionPolicy.SOURCE) public @interface MyAnnotation { }

<a name="AnCUv"></a>
## 注解的属性
- 可以有哪些
- 基本数据类型
- 类以及它们的数组
- 默认值
- 名为value的属性<br />
```java
// 注解的属性
@Target({ElementType.METHOD, ElementType.FIELD})
public @interface SpringBootApp {
String value() default "默认";
String foo();
}
// 使用
@SpringBootApp(value = {"默认", "value1", "value2"}, foo = "foo")
public class Main {...}
JDK自带的注解
注解是如何工作的
- 注解仅仅是一段信息,它自己无法工作
- 没有东西处理它们的话,注解没有任何用处
通过反射获取注解
- Method.getAnnotation
- Class.getAnnotation