什么时候执行Java注释?

什么时候执行Java注释?,java,annotations,Java,Annotations,我只是想写一些注释,可以在运行时、调用服务方法之前或之后立即执行 我不知道它们是在运行时还是编译时执行。注释不执行;它们是由各种工具读取的注释或标记。有些是由编译器读取的,比如@Override;其他的则嵌入在类文件中,并在运行时由Hibernate等工具读取。但他们自己什么也不做 您可能会转而考虑,它可以用于验证前置条件和后置条件。注释对代码没有影响,它们提供的信息将由编译器或其他工具进行评估 注释有许多用途,其中包括: 编译器的信息-编译器可以使用注释来检测错误或抑制警告 编译器时间和部署时

我只是想写一些注释,可以在运行时、调用服务方法之前或之后立即执行


我不知道它们是在运行时还是编译时执行。

注释不执行;它们是由各种工具读取的注释或标记。有些是由编译器读取的,比如
@Override
;其他的则嵌入在类文件中,并在运行时由Hibernate等工具读取。但他们自己什么也不做


您可能会转而考虑,它可以用于验证前置条件和后置条件。

注释对代码没有影响,它们提供的信息将由编译器或其他工具进行评估

注释有许多用途,其中包括:

编译器的信息-编译器可以使用注释来检测错误或抑制警告

编译器时间和部署时间处理-软件工具可以处理注释 用于生成代码、XML文件等的信息

运行时处理-一些注释可在运行时检查


请参见此图。

实际上,它们可以在两种环境中读取,具体取决于您设置的保留策略

实际上,定义注释时,必须指定参数
@Retention
,该参数定义注释在源代码(源代码)、类文件(类)或运行时(运行时)中是否可用


注释只是标记。他们不执行和做任何事情

您可以指定不同的保留策略:

  • SOURCE:注释仅保留在源文件中,并在编译过程中丢弃
  • 类:编译期间存储在.CLASS文件中的注释,在运行时不可用
  • 运行时:注释存储在.class文件中,在运行时可用
详情如下:

  • 注释只是源代码中的标记。它们将被IDE、编译器或注释处理器等工具使用

  • 您可以使用@Retention定义是否应在源、类或运行时中计算注释

  • 如果您想定义自己拥有的注释,并且只有您知道注释应该做什么,那么您也应该编写一个注释处理器。 (但这并不简单——也许吧)


  • 这取决于随该批注附加的保留策略

    保留策略决定了批注应在哪一点进行 丢弃的。Java通过定义了3种类型的保留策略
    java.lang.annotation.RetentionPolicy
    枚举。它有
    源代码
    运行时

    • 保留策略为
      源代码的批注将仅保留为
      源代码,并在编译时丢弃

    • 保留策略为
      CLASS
      的批注将保留到
      编译代码,并在运行时丢弃

    • 具有保留策略
      运行时
      的批注将提供给
      JVM通过运行时

    保留策略将使用java内置函数指定 注释
    @Retention
    ,我们必须通过保留策略
    类型。默认的保留策略类型是
    CLASS

    ,读者应该知道,在运行时可以(默认情况下)禁用断言。不要将应用程序关键行为放在断言中。
    @Retention(RetentionPolicy.RUNTIME)
    public @interface MyAnnotation {}