2009-10-06 124 views
2

任何人都可以请简单的英语解释下面两段的含义吗? (来自http://www.ibm.com/developerworks/java/library/j-cwt08025.html两者)​​关于注释的说明

“注释是在你如何使用它们 方面更加灵活, 选项注释 信息是否被包含在编译器类 输出文件并提出 可用在运行时应用 时间“

不知道这些是什么意思。可以将注释配置为可选地更改字节码?

虽然注释是理想的,涉及到一个特定的 部件 元数据,它们不与跨组件 应用非常适合于 元数据。

恕我直言,大多数Web应用程序都是跨组件的。作者在这里想说什么?

回答

3

注释是在方面更灵活的,你如何使用它们,与选项 注释信息是否是 将包含在类文件输出 由编译器,并提供给 在运行时应用

此,我认为,是指这样的事实,Java5中的注释可以被编译器下降,而一些可以保留在字节码中。这是由@Retention注释被放置在您的注释类型,e.g

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

这表明@Deprecated注释将存在于字节码,并且也将是反射可见光的控制。 java.lang.annotation.RetentionPolicy定义了不同的选项。

+0

谢谢Skaffman,这很好地阐明了它。 – dchucks 2009-10-06 08:27:32

3

“注释更加灵活的,你如何使用它们,与选择方面的注释信息是否被包含在由编译器输出的类文件并在运行时提供给应用程序”

它比XDoclet的更加灵活,因为:

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

虽然注释是理想的,涉及到一个特定的成分的元数据,它们不能很好地适用于元数据与交叉组件应用程序。

注解(如XDoclet的)具有一个有趣的特点,而不是外部XML例如:
注解住在代码,所以很自然他们将被施加到它们被定义的代码上。您不必指定(使用一些复杂的语法)它们应用的代码片段。实例:

  • 如果注释是在一个方法中定义,它自然适用于该方法
  • 如果一个注解被上一字段中定义的,它自然适用于场
  • 如果一个注解被限定在一类,它自然适用于该类
  • 如果注释是在包中定义,它自然适用于包装

如果你想有相同的外部XML文件,你必须使用一个复杂的语法来识别你引用的代码片段。所以这使得他们很容易申请。

此外,如果代码重构(如重命名),注释继续正常工作,而外部XML将不得不改变指向新的类或方法名称。


我不认为在一个web应用程序中,大多数事情是交叉组件。

  • 如果你定义了一个实体的Persistance(到一个数据库),就像这个类应该被持久化的表一样,它对所有的实体都不是全局的,它只影响当前的实体。
  • 同许多其他例子...