2017-08-24 66 views
2

我想檢查存在於java類文件中的註釋,而不需要加載它的任何依賴關係,只需要加載基本的JVM庫和有問題的類文件。有沒有辦法在「未加載」的java類文件中檢查類,字段和方法級別的註釋?

要在運行時在java中加載一個類,需要一個類路徑,使其具有字段,方法和參數依賴關係。我想在非其他文件可能存在的環境中執行此操作。

這可能嗎?有沒有可用的庫來做到這一點?

+0

幾乎所有的字節碼操作庫都會提供這個功能,請參閱https://stackoverflow.com/questions/2261947/are-there-alternatives-to-cglib –

回答

3

簡單:那你不想加載這個班。

您認爲該類爲類文件生活在文件系統中。

換句話說:它是一個包含二進制數據的資源 - 然後解析。無論是你自己,還是通過使用一個爲你做這件事的圖書館(這將是理智的,首選的方式,而不是重新發明輪子)。

查看here瞭解如何做到這一點的選項列表。或者你直接轉向asm字節碼解析器。

+0

是的解析器庫是最好的,對於一個好的簡單庫那麼將是最好的:)像javap這樣的應用程序面向人類可讀的輸出,因此必須解析並解決所有參考,這似乎就像輪子重新發明。 Java或Ruby庫對我們的構建系統來說是最好的選擇。 – peterk

+0

我不是這方面的專家。您可以轉到stackexchange.com上的軟件推薦網站。 – GhostCat

0

您不需要任何外部庫,只需使用java.lang.Class即可。寫下你的班級的名字:

[NameOfMyClass].class.getDeclaredFields(); 
[NameOfMyClass].class.getDeclaredConstructors(); 
[NameOfMyClass].class.getDeclaredMethods(); 

接口和許多其他屬性是一樣的。

+0

請注意,這需要將類文件加載到想要讀取這些值的應用程序中。 – peterk

相關問題