Я никогда не пойму, почему так много разработчиков вызывают методы на JoinPoint
для извлечения конкретной информации, которую они получают бесплатно, просто регистрируя сам экземпляр точки соединения.Здесь есть все: тип точки соединения, сигнатура метода с именем класса и тип возвращаемого значения.Это то, что вам нужно, если вы действительно хотите знать, что происходит в ваших аспектах.Сокрытие информации только путем регистрации ее части значительно усложняет отладку.Кроме того, вызов большого количества методов не ускоряет процесс регистрации.И тогда они жалуются, что АОП "медленный".; -)
Как бы то ни было, вы хотите использовать joinPoint.getSignature().getDeclaringTypeName()
здесь.Вместо этого вы регистрируете класс соединения и имя перехваченного метода.
Внимание, joinPoint.getSignature().getDeclaringType()
даст вам тип динамического прокси, который, вероятно, не тот, который вы хотите.
Обновление: Если вы используете ((MethodSignature) thisJoinPoint.getSignature()).get*()
, у вас есть доступ к еще нескольким получателям:
Method getMethod()
Class getReturnType()
Class[] getParameterTypes()
Class[] getExceptionTypes()
String[] getParameterNames()
String toString()
int getModifiers()
String getName()
String toShortString()
String toLongString()
Class getDeclaringType()
String getDeclaringTypeName()
И, что интересно, в этом случае ((MethodSignature) thisJoinPoint.getSignature()).getDeclaringType()
дает вам реальный класс, а непрокси класс.