注解的实现在哪里?

问题描述 投票:0回答:1

根据我的理解,

Annotation
是元数据。它将在编译时或运行时完成其工作。

考虑一下注释

@Override
,它确保方法是在超类/接口中定义的,并且我将重写它。如果不是,编译器会抛出错误。这里的问题是,关于此检查的实际业务逻辑写在哪里。 这里我假设,它应该用
javac
编译器编写,因为此注释是
java.base
模块的一部分。

但是像

@PostConstruct
(来自 javax.annotation)和
@Getter
(来自 lombok)这样的注释呢?这些是作为 jar 依赖项添加的注释。我正在搜索它的实现但没有找到。 就像
@PostConstruct
逻辑如何调用一样。
@Getter
如何调用并创建字段的 getter 方法并嵌入到
.class
文件中。

那么我在哪里可以找到驱动注释行为的底层机制。

java annotations
1个回答
0
投票

没有单一的底层机制来驱动注释的行为。

  • 一些编译时注释是由编译器本身实现的。 从 Java 21 开始,这些是
    @Target
    @Retention
    @Inherited
    @Override
    @SuppressWarnings
    @Deprecated
    @SafeVarargs
    @Repeatable
    @FunctionalInterface
  • 其他编译时注释由自定义注释处理器处理。
  • 一些注释是在“代码编织:编译和运行之间的步骤”中处理的。这些通常需要读取类文件,并使用某种“字节代码工程”库来修改字节码
  • 一些注释是在运行时处理的,或者在类加载期间,使用检测 API 或通过其他方式。 例如,用户或库代码可以使用反射来检索类的运行时注释,并根据其发现的内容以某种方式修改应用程序行为。

另请参阅:

© www.soinside.com 2019 - 2024. All rights reserved.