簡體   English   中英

Java運行時保留批注-在編譯時需要批注類,但在運行時不需要嗎?

[英]Java runtime retention annotations - annotation class required at compile time but not at runtime?

我試圖找出與編譯時和運行時類路徑有關的確切效果,該類的運行時級別保留注解已注解,例如:@ javax.inject.Named。 到目前為止,這是我的理解:

  1. javax.inject.Named類必須在編譯時出現在類路徑上。
  2. 然后將其作為元數據編譯為字節碼,並可以在運行時通過Reflections API獲取並進行相應處理; 但是,此類不需要在運行時類路徑上存在。

因此,如果我使用帶有@ javax.inject.Named注釋的Java類編譯jar,則可以在容器(即Jboss)和從命令行啟動的普通JVM中運行此已編譯的jar文件(無需其他操作) classpath整體)。 但是,如果我將此源代碼提供給僅使用javac即可與之一起編譯的項目,則它將不再正確編譯嗎? 如果這個假設是正確的,那么,如果我需要在可能正在容器中運行的項目(即Jboss)中共享已編譯的二進制文件和源文件,這似乎有點限制。

如果是這種情況,我是否需要創建一個包裝對象(用@ javax.inject.Named注釋),將其委派給內部非注釋對象? 還有一種在編譯時禁用注釋處理的選項嗎? 參見http://docs.oracle.com/javase/7/docs/technotes/tools/solaris/javac.html#processing

您需要注釋出現在編譯類路徑中,以使用注釋編譯源文件。 您不需要在類路徑中使用帶有注釋的已編譯類B來編譯類A。

許多開源庫(例如Guava或DbSetup)都使用javax.annotation或Findbugs注釋,但是您無需在類路徑中使用這些注釋來編譯(並運行)自己的源代碼就可以了庫。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM