AopUtils.getTargetClass(...) never returns null (SPR-7011)
This commit is contained in:
@@ -237,7 +237,7 @@ public abstract class JmxUtils {
|
||||
* @return the bean class to expose
|
||||
* @see org.springframework.util.ClassUtils#getUserClass(Object)
|
||||
*/
|
||||
public static Class getClassToExpose(Object managedBean) {
|
||||
public static Class<?> getClassToExpose(Object managedBean) {
|
||||
return ClassUtils.getUserClass(managedBean);
|
||||
}
|
||||
|
||||
@@ -247,12 +247,12 @@ public abstract class JmxUtils {
|
||||
* (for example, checked for annotations).
|
||||
* <p>This implementation returns the superclass for a CGLIB proxy and
|
||||
* the class of the given bean else (for a JDK proxy or a plain bean class).
|
||||
* @param beanClass the bean class (might be an AOP proxy class)
|
||||
* @param clazz the bean class (might be an AOP proxy class)
|
||||
* @return the bean class to expose
|
||||
* @see org.springframework.util.ClassUtils#getUserClass(Class)
|
||||
*/
|
||||
public static Class getClassToExpose(Class beanClass) {
|
||||
return ClassUtils.getUserClass(beanClass);
|
||||
public static Class<?> getClassToExpose(Class<?> clazz) {
|
||||
return ClassUtils.getUserClass(clazz);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -260,14 +260,14 @@ public abstract class JmxUtils {
|
||||
* <p>This implementation checks for {@link javax.management.DynamicMBean}
|
||||
* classes as well as classes with corresponding "*MBean" interface
|
||||
* (Standard MBeans) or corresponding "*MXBean" interface (Java 6 MXBeans).
|
||||
* @param beanClass the bean class to analyze
|
||||
* @param clazz the bean class to analyze
|
||||
* @return whether the class qualifies as an MBean
|
||||
* @see org.springframework.jmx.export.MBeanExporter#isMBean(Class)
|
||||
*/
|
||||
public static boolean isMBean(Class beanClass) {
|
||||
return (beanClass != null &&
|
||||
(DynamicMBean.class.isAssignableFrom(beanClass) ||
|
||||
(getMBeanInterface(beanClass) != null || getMXBeanInterface(beanClass) != null)));
|
||||
public static boolean isMBean(Class<?> clazz) {
|
||||
return (clazz != null &&
|
||||
(DynamicMBean.class.isAssignableFrom(clazz) ||
|
||||
(getMBeanInterface(clazz) != null || getMXBeanInterface(clazz) != null)));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -277,13 +277,13 @@ public abstract class JmxUtils {
|
||||
* @param clazz the class to check
|
||||
* @return the Standard MBean interface for the given class
|
||||
*/
|
||||
public static Class getMBeanInterface(Class clazz) {
|
||||
if (clazz.getSuperclass() == null) {
|
||||
public static Class<?> getMBeanInterface(Class<?> clazz) {
|
||||
if (clazz == null || clazz.getSuperclass() == null) {
|
||||
return null;
|
||||
}
|
||||
String mbeanInterfaceName = clazz.getName() + MBEAN_SUFFIX;
|
||||
Class[] implementedInterfaces = clazz.getInterfaces();
|
||||
for (Class iface : implementedInterfaces) {
|
||||
for (Class<?> iface : implementedInterfaces) {
|
||||
if (iface.getName().equals(mbeanInterfaceName)) {
|
||||
return iface;
|
||||
}
|
||||
@@ -298,12 +298,12 @@ public abstract class JmxUtils {
|
||||
* @param clazz the class to check
|
||||
* @return whether there is an MXBean interface for the given class
|
||||
*/
|
||||
public static Class getMXBeanInterface(Class clazz) {
|
||||
if (clazz.getSuperclass() == null) {
|
||||
public static Class<?> getMXBeanInterface(Class<?> clazz) {
|
||||
if (clazz == null || clazz.getSuperclass() == null) {
|
||||
return null;
|
||||
}
|
||||
Class[] implementedInterfaces = clazz.getInterfaces();
|
||||
for (Class iface : implementedInterfaces) {
|
||||
for (Class<?> iface : implementedInterfaces) {
|
||||
boolean isMxBean = iface.getName().endsWith(MXBEAN_SUFFIX);
|
||||
if (mxBeanAnnotationAvailable) {
|
||||
Boolean checkResult = MXBeanChecker.evaluateMXBeanAnnotation(iface);
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2002-2009 the original author or authors.
|
||||
* Copyright 2002-2010 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -17,13 +17,13 @@
|
||||
package org.springframework.scheduling.annotation;
|
||||
|
||||
import java.lang.annotation.Annotation;
|
||||
import java.util.concurrent.Executor;
|
||||
|
||||
import org.springframework.aop.framework.Advised;
|
||||
import org.springframework.aop.framework.AopInfrastructureBean;
|
||||
import org.springframework.aop.framework.ProxyConfig;
|
||||
import org.springframework.aop.framework.ProxyFactory;
|
||||
import org.springframework.aop.support.AopUtils;
|
||||
import org.springframework.beans.BeansException;
|
||||
import org.springframework.beans.factory.BeanClassLoaderAware;
|
||||
import org.springframework.beans.factory.InitializingBean;
|
||||
import org.springframework.beans.factory.config.BeanPostProcessor;
|
||||
@@ -32,8 +32,6 @@ import org.springframework.core.task.TaskExecutor;
|
||||
import org.springframework.util.Assert;
|
||||
import org.springframework.util.ClassUtils;
|
||||
|
||||
import java.util.concurrent.Executor;
|
||||
|
||||
/**
|
||||
* Bean post-processor that automatically applies asynchronous invocation
|
||||
* behavior to any bean that carries the {@link Async} annotation at class or
|
||||
@@ -105,22 +103,16 @@ public class AsyncAnnotationBeanPostProcessor extends ProxyConfig
|
||||
}
|
||||
|
||||
|
||||
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
|
||||
public Object postProcessBeforeInitialization(Object bean, String beanName) {
|
||||
return bean;
|
||||
}
|
||||
|
||||
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
|
||||
public Object postProcessAfterInitialization(Object bean, String beanName) {
|
||||
if (bean instanceof AopInfrastructureBean) {
|
||||
// Ignore AOP infrastructure such as scoped proxies.
|
||||
return bean;
|
||||
}
|
||||
|
||||
Class<?> targetClass = AopUtils.getTargetClass(bean);
|
||||
if (targetClass == null) {
|
||||
// Can't do much here.
|
||||
return bean;
|
||||
}
|
||||
|
||||
if (AopUtils.canApply(this.asyncAnnotationAdvisor, targetClass)) {
|
||||
if (bean instanceof Advised) {
|
||||
((Advised) bean).addAdvisor(this.asyncAnnotationAdvisor);
|
||||
|
||||
@@ -21,7 +21,6 @@ import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import org.springframework.aop.support.AopUtils;
|
||||
import org.springframework.beans.BeansException;
|
||||
import org.springframework.beans.factory.DisposableBean;
|
||||
import org.springframework.beans.factory.config.BeanPostProcessor;
|
||||
import org.springframework.context.ApplicationContext;
|
||||
@@ -82,15 +81,12 @@ public class ScheduledAnnotationBeanPostProcessor implements BeanPostProcessor,
|
||||
}
|
||||
|
||||
|
||||
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
|
||||
public Object postProcessBeforeInitialization(Object bean, String beanName) {
|
||||
return bean;
|
||||
}
|
||||
|
||||
public Object postProcessAfterInitialization(final Object bean, String beanName) throws BeansException {
|
||||
public Object postProcessAfterInitialization(final Object bean, String beanName) {
|
||||
Class<?> targetClass = AopUtils.getTargetClass(bean);
|
||||
if (targetClass == null) {
|
||||
return bean;
|
||||
}
|
||||
ReflectionUtils.doWithMethods(targetClass, new MethodCallback() {
|
||||
public void doWith(Method method) throws IllegalArgumentException, IllegalAccessException {
|
||||
Scheduled annotation = AnnotationUtils.getAnnotation(method, Scheduled.class);
|
||||
|
||||
Reference in New Issue
Block a user