AopUtils.getTargetClass(...) never returns null (SPR-7011)

This commit is contained in:
Juergen Hoeller
2010-03-22 18:31:13 +00:00
parent a2c3274b8e
commit 296aa96d71
5 changed files with 41 additions and 57 deletions

View File

@@ -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);

View File

@@ -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);

View File

@@ -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);