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;
|
}
|
}
|