由於要將方法緩存起來提升性能java
java.lang.IllegalArgumentException: object is not an instance of declaring class
以前個人一篇文章:
https://blog.csdn.net/dataiyangu/article/details/88370206
說的是由於第一次構造出Method的類,和真正執行的時候的對象的類不是同一的。web
通過此次發現:這個錯誤還和ClassLoader有關係,若是ClassLoader不相同,也會報這個錯誤。緩存
log.debug("req###########################################+" + req.getClass().getClassLoader().toString());
能夠看到兩個request的context是不一樣的。svg
因此會報如上的錯誤。性能
固然,解決的辦法就是將
classLoader的hashCode+className+methodName 做爲key緩存到HashMap中,spa
這個時候可能會報錯空指針
由於,有些基礎的類確實得不到ClassLoader,而在個人實際狀況中,這些類(真的是得不到ClassLoader的狀況)不會出現二次訪問的狀況,因此不須要訪問,因此作以下處理便可。.net
ClassLoader classLoader = object.getClass().getClassLoader(); if (classLoader != null) { int classLoaderHash = classLoader.toString().hashCode(); methodId = classLoaderHash+className + methodName; }else{ methodId = className + methodName; }