Polishing

This commit is contained in:
Juergen Hoeller 2013-10-27 01:21:55 +02:00
parent a6b0261000
commit 4cb453bbdc
2 changed files with 10 additions and 17 deletions

View File

@ -21,7 +21,6 @@ import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException; import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method; import java.lang.reflect.Method;
import java.lang.reflect.Modifier; import java.lang.reflect.Modifier;
import java.lang.reflect.TypeVariable;
import java.security.AccessController; import java.security.AccessController;
import java.security.PrivilegedAction; import java.security.PrivilegedAction;
import java.security.PrivilegedActionException; import java.security.PrivilegedActionException;
@ -666,9 +665,8 @@ public abstract class AbstractAutowireCapableBeanFactory extends AbstractBeanFac
if (Modifier.isStatic(factoryMethod.getModifiers()) == isStatic && if (Modifier.isStatic(factoryMethod.getModifiers()) == isStatic &&
factoryMethod.getName().equals(mbd.getFactoryMethodName()) && factoryMethod.getName().equals(mbd.getFactoryMethodName()) &&
factoryMethod.getParameterTypes().length >= minNrOfArgs) { factoryMethod.getParameterTypes().length >= minNrOfArgs) {
TypeVariable<Method>[] declaredTypeVariables = factoryMethod.getTypeParameters();
// No declared type variables to inspect, so just process the standard return type. // No declared type variables to inspect, so just process the standard return type.
if (declaredTypeVariables.length > 0) { if (factoryMethod.getTypeParameters().length > 0) {
// Fully resolve parameter names and argument values. // Fully resolve parameter names and argument values.
Class<?>[] paramTypes = factoryMethod.getParameterTypes(); Class<?>[] paramTypes = factoryMethod.getParameterTypes();
String[] paramNames = null; String[] paramNames = null;
@ -747,15 +745,15 @@ public abstract class AbstractAutowireCapableBeanFactory extends AbstractBeanFac
// Find the given factory method, taking into account that in the case of // Find the given factory method, taking into account that in the case of
// @Bean methods, there may be parameters present. // @Bean methods, there may be parameters present.
ReflectionUtils.doWithMethods(fbClass, ReflectionUtils.doWithMethods(fbClass,
new ReflectionUtils.MethodCallback() { new ReflectionUtils.MethodCallback() {
@Override @Override
public void doWith(Method method) throws IllegalArgumentException, IllegalAccessException { public void doWith(Method method) throws IllegalArgumentException, IllegalAccessException {
if (method.getName().equals(factoryMethodName) && if (method.getName().equals(factoryMethodName) &&
FactoryBean.class.isAssignableFrom(method.getReturnType())) { FactoryBean.class.isAssignableFrom(method.getReturnType())) {
objectType.value = GenericTypeResolver.resolveReturnTypeArgument(method, FactoryBean.class); objectType.value = GenericTypeResolver.resolveReturnTypeArgument(method, FactoryBean.class);
}
} }
} });
});
if (objectType.value != null) { if (objectType.value != null) {
return objectType.value; return objectType.value;
} }

View File

@ -654,17 +654,12 @@ public class BeanFactoryGenericsTests {
/** /**
* Tests support for parameterized static {@code factory-method} declarations such as * Tests support for parameterized static {@code factory-method} declarations such as
* Mockito's {@code mock()} method which has the following signature. * Mockito's {@code mock()} method which has the following signature.
*
* <pre> * <pre>
* {@code * {@code
* public static <T> T mock(Class<T> classToMock) * public static <T> T mock(Class<T> classToMock)
* } * }
* </pre> * </pre>
* * <p>See SPR-9493
* <p>
* See SPR-9493
*
* @since 3.2
*/ */
@Test @Test
public void parameterizedStaticFactoryMethod() { public void parameterizedStaticFactoryMethod() {