import org.springframework.aop.framework.AdvisedSupport;import org.springframework.aop.framework.AopProxy;import org.springframework.aop.support.AopUtils;import java.lang.reflect.Field;/** * @author shizi * @since 2020/10/19 1:45 下午 */public class SpringTargetBeanUtils {    /**     * 获取 目标对象     *     * @param proxy 代理对象     */    public static Object getTarget(Object proxy) throws Exception {        if (AopUtils.isJdkDynamicProxy(proxy)) {            return getJdkDynamicProxyTargetObject(proxy);        } else if(AopUtils.isCglibProxy(proxy)){            return getCglibProxyTargetObject(proxy);        } else {            return proxy;        }    }    private static Object getCglibProxyTargetObject(Object proxy) throws Exception {        Field h = proxy.getClass().getDeclaredField("CGLIB$CALLBACK_0");        h.setAccessible(true);        Object dynamicAdvisedInterceptor = h.get(proxy);        Field advised = dynamicAdvisedInterceptor.getClass().getDeclaredField("advised");        advised.setAccessible(true);        return ((AdvisedSupport)advised.get(dynamicAdvisedInterceptor)).getTargetSource().getTarget();    }    private static Object getJdkDynamicProxyTargetObject(Object proxy) throws Exception {        Field h = proxy.getClass().getSuperclass().getDeclaredField("h");        h.setAccessible(true);        AopProxy aopProxy = (AopProxy) h.get(proxy);        Field advised = aopProxy.getClass().getDeclaredField("advised");        advised.setAccessible(true);        return ((AdvisedSupport) advised.get(aopProxy)).getTargetSource().getTarget();    }}