cglib获取原始类

import java.lang.reflect.Proxy;

public class ProxyUtils {

    public static final String GUICE_PROXY_FLAG = "$EnhancerByGuice$";
    public static final String CGLIB_PROXY_FLAG = "$EnhancerByCGLIB$";

    private ProxyUtils() {}

    public static boolean isGuiceProxy(Class clazz) {
        return (clazz != null) && clazz.getName().contains(GUICE_PROXY_FLAG);
    }

    public static boolean isCglibProxy(Class clazz) {
        return (clazz != null) && clazz.getName().contains(CGLIB_PROXY_FLAG);
    }

    public static Class getRawClass(Object value) {
        if (null == value) {
            return null;
        }

        if (value instanceof ValueHolder) {
            return getRawClassFromGuiceProxy(((ValueHolder) value).getImplClass());
        }

        return isGuiceProxy(value.getClass())
                ? getRawClassFromGuiceProxy(value.getClass().getSuperclass())
                : value.getClass();
    }

    public static Class getRawClassFromGuiceProxy(final Class clazz) {
        if (!isGuiceProxy(clazz)) {
            return clazz;
        }

        Class rawClass;

        do {
            rawClass = clazz.getSuperclass();
        } while (rawClass.getName().contains(GUICE_PROXY_FLAG));

        return rawClass;
    }

    public static Class getRawClassFromProxy(final Class clazz) {
        if (isCglibProxy(clazz) || isGuiceProxy(clazz)) {
            return getRawClassFromProxy(clazz.getSuperclass());
        }

        return clazz;
    }


    
}

  

posted on 2023-08-17 13:35  silyvin  阅读(122)  评论(0编辑  收藏  举报