1

系统学习JAVA注解

 1 year ago
source link: https://dcbupt.github.io/2022/05/30/blog_article/%E7%B3%BB%E7%BB%9F%E5%AD%A6%E4%B9%A0%E7%B3%BB%E5%88%97/%E7%B3%BB%E7%BB%9F%E5%AD%A6%E4%B9%A0JAVA%E6%B3%A8%E8%A7%A3/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

系统学习JAVA注解

2022-05-302023-06-10系统学习系列


691 1 分钟

系统学习JAVA注解

JAVA 原生注解:

  • @Overried、@Deprecated 等,大多数用于「标记」和「检查」

框架定义的注解:

  • Spring 的@Controller、@Component 等,Lombok 的@Data、@Builder 等
  • 所谓的元 Annotation 就是用来修饰注解的
  • 常用的元 Annotation 有@Retention 和@Target
    • @Retention 注解可以简单理解为设置注解的生命周期
    • @Target 表示这个注解可以修饰哪些地方(比如方法、还是成员变量、还是包等等)

注解的生命周期

如果要自定义注解,必须关心它的生命周期。
@Retention 注解会修饰我们自定义注解生命周期。@Retention 注解传入的是 RetentionPolicy 枚举,该枚举有三个常量,分别是 SOURCE、CLASS 和 RUNTIME

  • SOURCE 代表着注解仅保留在源码级别中,在编译器会被处理,不会带到字节码文件中
  • CLASS 代表着注解在字节码文件中保留,但不会被 JVM 加载到内存
  • RUNTIME 代表着注解被 JVM 加载到内存时仍保留,因此运行时环境可以使用它

JAVA 编译阶段有一个过程为「注解抽象语法树」,这里其实就会去解析生命周期为 SOURCE 的注解,然后做处理的逻辑。
JDK 提供了 Hook,我们想要在编译时期做注解相关的事,可以继承 AbstractProcessor 并实现 process 方法。比如可以看到 lombok 就用 AnnotationProcessor 继承了 AbstractProcessor,这就是为什么使用了个@Data 这样的注解就能有 set/get 等方法了,就是在这里加上去的

完 ♥ 结

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK