2009-10-06 126 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(到一個數據庫),就像這個類應該被持久化的表一樣,它對所有的實體都不是全局的,它隻影響當前的實體。
  • 同許多其他例子...