簡體   English   中英

Java 庫如何檢測帶注釋的方法?

[英]How can a Java library detect annotated methods?

如果您知道要搜索的包(例如,通過使用Reflections 庫),則有多種方法可以找到具有特定注釋的所有方法。 但是如果我正在編寫一個庫,那么我不知道使用我的庫的包的名稱。 在這種情況下,我將如何查找具有特定注釋的所有方法?

如果您知道包名稱,則可以使用ClassGraph 之類的類路徑掃描器來查找該包中的類,然后您可以使用反射列出每個類的方法並找到哪些具有正確注釋的方法。 由於您不知道包名稱,因此您必須創造性地思考才能找到它。

我個人會嘗試一些事情,比如確定當前的調用堆棧,在堆棧的最底部獲取StackTraceElement ,使用StackTraceElement#getClassName()Class#forName(String)來獲取實現程序的主類(或調用您的庫的線程),獲取該類的包( Class#getPackage() ),然后使用Package#getName()獲取包的名稱。

總而言之,它看起來像這樣:

public static String getImplementingPackageName() throws ClassNotFoundException {
    StackTraceElement[] stackTraceElements = Thread.currentThread().getStackTrace();
    StackTraceElement bottom = stackTraceElements[stackTraceElements.length - 1];
    
    Class<?> caller = Class.forName(bottom.getClassName());
    Package callerPackage = caller.getPackage();
    String packageName = callerPackage.getName();
    
    return packageName;
}

您似乎實現了與 Spring Framework 中類似的邏輯。 那么,也許檢查他們如何解決這個問題是個好主意?

在這里你可以找到這個解決方案的一個很好的描述。

如果你想獲得更多信息,你可以去文檔

暫無
暫無

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

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