下面列出了org.springframework.util.ClassUtils#isCglibProxyClass ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
private void handler(final ServiceBean serviceBean) {
Class<?> clazz = serviceBean.getRef().getClass();
if (ClassUtils.isCglibProxyClass(clazz)) {
String superClassName = clazz.getGenericSuperclass().getTypeName();
try {
clazz = Class.forName(superClassName);
} catch (ClassNotFoundException e) {
log.error(String.format("class not found: %s", superClassName));
return;
}
}
final Method[] methods = ReflectionUtils.getUniqueDeclaredMethods(clazz);
for (Method method : methods) {
SoulDubboClient soulDubboClient = method.getAnnotation(SoulDubboClient.class);
if (Objects.nonNull(soulDubboClient)) {
post(buildJsonParams(serviceBean, soulDubboClient, method));
}
}
}
private void handler(final ServiceBean serviceBean) {
Class<?> clazz = serviceBean.getRef().getClass();
if (ClassUtils.isCglibProxyClass(clazz)) {
String superClassName = clazz.getGenericSuperclass().getTypeName();
try {
clazz = Class.forName(superClassName);
} catch (ClassNotFoundException e) {
log.error(String.format("class not found: %s", superClassName));
return;
}
}
final Method[] methods = ReflectionUtils.getUniqueDeclaredMethods(clazz);
for (Method method : methods) {
SoulDubboClient soulDubboClient = method.getAnnotation(SoulDubboClient.class);
if (Objects.nonNull(soulDubboClient)) {
post(buildJsonParams(serviceBean, soulDubboClient, method));
}
}
}
public Method findFactoryMethod(String beanName) {
if (!this.beansFactoryMetadata.containsKey(beanName)) {
return null;
}
AtomicReference<Method> found = new AtomicReference<>(null);
FactoryMetadata metadata = this.beansFactoryMetadata.get(beanName);
Class<?> factoryType = this.beanFactory.getType(metadata.getBean());
String factoryMethod = metadata.getMethod();
if (ClassUtils.isCglibProxyClass(factoryType)) {
factoryType = factoryType.getSuperclass();
}
ReflectionUtils.doWithMethods(factoryType, (method) -> {
if (method.getName().equals(factoryMethod)) {
found.compareAndSet(null, method);
}
});
return found.get();
}
private Class<?> getRealClass(Object bean) {
Class<?> clazz = bean.getClass();
while (ClassUtils.isCglibProxyClass(clazz)) {
clazz = clazz.getSuperclass();
}
return clazz;
}
public static Class<?> getTargetClass(Object candidate) {
Class<?> targetClass = AopUtils.getTargetClass(candidate);
if(ClassUtils.isCglibProxyClass(targetClass)){
targetClass = candidate.getClass().getSuperclass();
}
return targetClass;
}
@Override
public Class<?> getRealClassFromClass(Class<?> cls) {
if (ClassUtils.isCglibProxyClass(cls)) {
final Class<?> superclass = cls.getSuperclass();
// Lambda's generated class names also contain $$ which makes them trigger CGLIB
// proxy path. Adding more checks to handle this particular case.
if (superclass != null && (superclass != Object.class || wasCglibEnhanced(cls))) {
return getRealClassFromClass(superclass);
}
}
return cls;
}
private static boolean isAopProxy(Object object) {
return Proxy.isProxyClass(object.getClass()) || ClassUtils.isCglibProxyClass(object.getClass());
}
@Override
public boolean matches(Method method, Class targetClass) {
return !ClassUtils.isCglibProxyClass(targetClass) && isMonitoredAnnotationOnClassOrMethod(method, targetClass);
}
/**
* Check whether the given object is a JDK dynamic proxy or a CGLIB proxy.
* <p>This method additionally checks if the given object is an instance
* of {@link SpringProxy}.
* @param object the object to check
* @see #isJdkDynamicProxy
* @see #isCglibProxy
*/
public static boolean isAopProxy(@Nullable Object object) {
return (object instanceof SpringProxy &&
(Proxy.isProxyClass(object.getClass()) || ClassUtils.isCglibProxyClass(object.getClass())));
}
/**
* Check whether the given object is a JDK dynamic proxy or a CGLIB proxy.
* <p>This method additionally checks if the given object is an instance
* of {@link SpringProxy}.
* @param object the object to check
* @see #isJdkDynamicProxy
* @see #isCglibProxy
*/
public static boolean isAopProxy(Object object) {
return (object instanceof SpringProxy &&
(Proxy.isProxyClass(object.getClass()) || ClassUtils.isCglibProxyClass(object.getClass())));
}
/**
* Check whether the given object is a JDK dynamic proxy or a CGLIB proxy.
* <p>This method additionally checks if the given object is an instance
* of {@link SpringProxy}.
* @param object the object to check
* @see #isJdkDynamicProxy
* @see #isCglibProxy
*/
public static boolean isAopProxy(Object object) {
return (object instanceof SpringProxy &&
(Proxy.isProxyClass(object.getClass()) || ClassUtils.isCglibProxyClass(object.getClass())));
}