We tried to upgrade Spring framework from 2.5.5 to 3.1.1, during performance test we found that TransactionInterceptor will add some performance overhead because introduce of following method:
This new method will call Class.getDeclaredMethods() instead of using the method passed in directly.
If there are multiple transaction pointcuts defined and invoked in one call, the performance will be affected badly.
Can we do fallback support as 2.5.5 or add cache support for the method instead of call Class.getDeclaredMethods() each time?
#14606 Performance degradation for after Spring 3 ("is duplicated by")
#11975 Transaction names should use the concrete class name
I've fixed this through direct use of targetClass.getName() + "." + method.getName(), always exposing the signature against the concrete target class. This is as efficient as the original code was in 2.5.5, with largely the same result as after the #11975 change. And where it differs (e.g. in case of methods inherited from base classes), the result should actually be more meaningful than before (since the concrete class is what we dispatch to).