package com.xcong.excoin.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; 
 | 
    } 
 | 
} 
 |