Java注释何时执行?

我只是想编写一些可以在调用服务方法之前或之后立即执行的注释。

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

注释不会执行; 它们是各种工具读取的笔记或标记。 有些是由编译器读取的,比如@Override ; 其他的都嵌入在类文件中,并在运行时通过Hibernate等工具读取。 但他们自己也没有做任何事情。

您可能正在考虑断言 ,可用于validation前置和后置条件。

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

 @Retention(RetentionPolicy.RUNTIME) public @interface MyAnnotation {} 

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

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

  • SOURCE:注释仅保留在源文件中,在编译期间被丢弃。
  • CLASS:在编译期间存储在.class文件中的注释,在运行时不可用。
  • RUNTIME:存储在.class文件中的注释,在运行时可用。

更多信息: http : //www.java2s.com/Tutorial/Java/0020__Language/SpecifyingaRetentionPolicy.htm

注释对您的代码没有影响,它们是为了提供由编译器或其他工具评估的信息。

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

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

编译时和部署时处理 – 软件工具可以处理注释信息以生成代码,XML文件等。

运行时处理 – 可以在运行时检查某些注释。

见本页 。

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

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

  2. 如果应在源,类或运行时中评估注释,则可以使用@Retention进行定义。

  3. 如果您想要定义自己的注释,并且只知道注释应该做什么,那么您也应该编写注释处理器。 (但这不简单 – 也许)

它取决于附加该注释的保留策略。

  • 保留策略确定应丢弃注释的位置。 Java通过java.lang.annotation.RetentionPolicy枚举定义了3种类型的保留策略。

  • 它有SOURCE,CLASS和RUNTIME。

  • 具有保留策略的注释SOURCE将仅保留源代码,并在编译期间丢弃。

  • 保留政策CLASS的注释将保留至
    编译代码,并在运行时丢弃。

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

  • 保留策略将使用java内置注释@Retention指定,我们必须传递保留策略类型。

  • 默认保留策略类型为CLASS。