Java注释何时执行?

时间:2012-02-17 16:09:03

标签: java annotations

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

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

7 个答案:

答案 0 :(得分:11)

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

您可能会想到assertions,可以用来验证前后条件。

答案 1 :(得分:8)

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

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

答案 2 :(得分:7)

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

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

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

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

答案 3 :(得分:3)

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

  

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

     

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

     

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

     

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

请参阅此page

答案 4 :(得分:1)

这取决于该注释附带的保留政策。

  • 保留策略确定应在何时注释 丢弃。 Java通过以下三种方式定义了保留策略 java.lang.annotation.RetentionPolicy枚举。

  • 它具有SOURCE,CLASS和RUNTIME。

  • 带有保留策略SOURCE的注释将仅与 源代码,并在编译时丢弃。

  • 具有保留策略CLASS的注释将保留到
    编译代码,并在运行时丢弃。

  • 具有保留策略RUNTIME的注释将可用于 通过运行时的JVM。

  • 将使用内置的Java指定保留策略 注释@Retention,我们必须通过保留政策 类型。

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

答案 5 :(得分:0)

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

答案 6 :(得分:0)

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

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

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