package cc.mrbird.febs.common.aspect; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.reflect.MethodSignature; import java.lang.reflect.Method; /** * @author MrBird */ public abstract class BaseAspectSupport { Method resolveMethod(ProceedingJoinPoint point) { MethodSignature signature = (MethodSignature)point.getSignature(); Class targetClass = point.getTarget().getClass(); Method method = getDeclaredMethod(targetClass, signature.getName(), signature.getMethod().getParameterTypes()); if (method == null) { throw new IllegalStateException("无法解析目标方法: " + signature.getMethod().getName()); } return method; } private Method getDeclaredMethod(Class clazz, String name, Class... parameterTypes) { try { return clazz.getDeclaredMethod(name, parameterTypes); } catch (NoSuchMethodException e) { Class superClass = clazz.getSuperclass(); if (superClass != null) { return getDeclaredMethod(superClass, name, parameterTypes); } } return null; } }