关于注释的说明

时间:2009-10-06 07:21:20

标签: java xml annotations metadata

任何人都可以用简单的英语解释以下两段的含义吗? (摘自http://www.ibm.com/developerworks/java/library/j-cwt08025.html

  

“注释更加灵活   你如何使用它们的术语   是否注释的选项   信息将被包括在课堂上   由编译器输出的文件   在运行时可用于应用程序   时间“

不确定这些意味着什么。 Can Annotations可以配置为可选地更改字节码吗?

  

虽然注释是理想的   与特定内容相关的元数据   组件,他们不太适合   具有跨组件的元数据   应用

恕我直言,大多数网络应用程序都是跨组件的。作者试图在这说什么?

2 个答案:

答案 0 :(得分:3)

  

“注释在使用方式方面更加灵活,可以选择注释信息是否包含在编译器输出的类文件中,并在运行时提供给应用程序”

它比XDoclet更灵活,因为:

  • 可以从源代码(如XDoclet)
  • 中使用它
  • 可以在运行时使用,只有字节码而不是源代码(不像XDoclet)

  

虽然注释非常适合与特定组件相关的元数据,但它们并不适合使用跨组件应用程序的元数据。

注释(如XDoclet)有一个有趣的功能,而不是外部Xml,例如:
注释存在于代码中,因此将它们应用于定义的代码是很自然的。您不必指定(使用一些复杂的语法)它们应用的代码段。例子:

  • 如果在方法上定义了注释,它自然适用于该方法
  • 如果在字段上定义了注释,则它自然适用于该字段
  • 如果在类上定义了注释,它自然适用于该类
  • 如果在包上定义了注释,它自然适用于该包

如果要在外部Xml文件中使用相同的内容,则必须使用复杂的语法来标识所引用的代码段。这样就可以很容易地应用它们。

此外,在代码重构(如重命名)的情况下,注释继续正常工作,而外部xml必须更改为指向新的类或方法名称。 / p>


我不相信在Web应用程序中,大多数东西都是跨组件的。

  • 如果您定义了实体的持久性(对数据库),例如应该保留此类的表,那么它不是所有实体的全局,它只影响当前实体。
  • 与许多其他例子相同......

答案 1 :(得分:3)

  

注释在术语上更灵活   如何使用它们,以及   是否注释信息   要包含在类文件输出中   由编译器提供给   运行时的应用程序

我认为这是指编译器可以删除Java5注释的事实,而有些可以保留在字节码中。这由注释类型上的@Retention注释控制,例如

@Documented
@Retention(value=RUNTIME)
public @interface Deprecated

这表示@Deprecated注释将出现在字节码中,并且对于反射也是可见的。 java.lang.annotation.RetentionPolicy定义了不同的选项。