java类获取声明,获取用于MethodInvocation的实际类而不是声明类 - java
我正在研究Web應用程序,以解決一些問題。該應用程序使用Tomcat,Jersey和Guice。用于授權目的的MethodInterceptor中發生了問題之一。這是方法,已裁剪為相關部分:
public Object invoke(MethodInvocation invoc) throws Throwable {
// ...
//Check that the annotation actually exists
if(! invoc.getMethod().getDeclaringClass().isAnnotationPresent(Tool.class))
{
throw new BaseException("...");
}
// ...
}
現在的問題是某些“面向Web”的方法是從父類繼承而沒有在子類中被覆蓋。如果我正確理解getDeclaringClass(),在這種情況下它將返回父類,但是我們真正想要的是子類。一些測試似乎證實了這一點-如果我在子類中重寫該方法,一切都很好,但是,如果我不放入重寫中,則會引發異常。
因此,給定一個MethodInvocation對象,是否有辦法將其追溯到實例化的“實際”類,而不是聲明該方法的類?還是需要其他方法?最壞的情況是,我可以根據需要注釋每個方法,而不必注釋類。
很抱歉,如果這是一個容易回答的冗長問題-我的Java非常生銹。
參考方案
很簡單,需要在MethodInvocation上使用getThis().getClass()而不是getMethod().getDeclaringClass():
if(! invoc.getThis().getClass().isAnnotationPresent(Tool.class))
{
throw new BaseException("...");
}
盡管就我而言,Guice通過放入一個自動生成的子類(例如,以“$$ EnhancerByGuice ...結尾”的類名)使事情有些復雜,這是通過使用getSuperclass()在樹上向上移動來解決的:
if(! invoc.getThis().getClass().getSuperclass().isAnnotationPresent(Tool.class))
{
throw new BaseException("...");
}
Java:從類中查找項目名稱 - java
僅通過類的實例,如何使用Java反射或類似方法查找項目名稱?如果不是,項目名稱(我真正想要的是)可以找到程序包名稱嗎? 參考方案 項目只是IDE使用的簡單組織工具,因此項目名稱不是類或JVM中包含的信息。要獲取軟件包,請使用Class#getPackage()。然后,可以調用Package#getName()將包作為您在代碼的包聲明中看到的String來獲取…Java:正則表達式模式匹配器是否有大小限制? - java
我的模式類似于OR:“word1 | word2 | word3”我大約有800個字。可能有問題嗎? 參考方案 您僅受記憶和理智的限制。 :)Java:線程池如何將線程映射到可運行對象 - java
試圖繞過Java并發問題,并且很難理解線程池,線程以及它們正在執行的可運行“任務”之間的關系。如果我創建一個有10個線程的線程池,那么我是否必須將相同的任務傳遞給池中的每個線程,或者池化的線程實際上只是與任務無關的“工人無人機”可用于執行任何任務?無論哪種方式,Executor / ExecutorService如何將正確的任務分配給正確的線程? 參考方案 …Java:我可以在Hashmaps中使用數組嗎? - java
我可以在Hashmaps中使用數組嗎?如果是這樣,則聲明這種哈希圖的確切語法是什么?謝謝 參考方案 數組也是對象。甚至像int[]這樣的原始數組。Map map = new HashMap();JAVA:字節碼和二進制有什么區別? - java
java字節代碼(已編譯的語言,也稱為目標代碼)與機器代碼(當前計算機的本機代碼)之間有什么區別?我讀過一些書,他們將字節碼稱為二進制指令,但我不知道為什么。 參考方案 字節碼是獨立于平臺的,在Windows中運行的編譯器編譯的字節碼仍將在linux / unix / mac中運行。機器代碼是特定于平臺的,如果在Windows x86中編譯,則它將僅在Win…
總結
以上是生活随笔為你收集整理的java类获取声明,获取用于MethodInvocation的实际类而不是声明类 - java的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php判断有没有分页,php分页怎么判断
- 下一篇: 文档上传下载 php开源,PHP文件的上