diff --git a/spring-beans/src/main/java/org/springframework/beans/factory/support/MethodOverrides.java b/spring-beans/src/main/java/org/springframework/beans/factory/support/MethodOverrides.java index fc64caf648..6df31aff78 100644 --- a/spring-beans/src/main/java/org/springframework/beans/factory/support/MethodOverrides.java +++ b/spring-beans/src/main/java/org/springframework/beans/factory/support/MethodOverrides.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2012 the original author or authors. + * Copyright 2002-2015 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. @@ -18,6 +18,7 @@ package org.springframework.beans.factory.support; import java.lang.reflect.Method; import java.util.HashSet; +import java.util.LinkedHashSet; import java.util.Set; /** @@ -34,7 +35,7 @@ import java.util.Set; */ public class MethodOverrides { - private final Set overrides = new HashSet(0); + private final Set overrides = new LinkedHashSet(0); /** @@ -89,14 +90,16 @@ public class MethodOverrides { * @return the method override, or {@code null} if none */ public MethodOverride getOverride(Method method) { - for (MethodOverride override : this.overrides) { - if (override.matches(method)) { - return override; + MethodOverride match = null; + for (MethodOverride candidate : this.overrides) { + if (candidate.matches(method)) { + match = candidate; } } - return null; + return match; } + @Override public boolean equals(Object other) { if (this == other) { diff --git a/spring-beans/src/test/java/org/springframework/beans/factory/support/LookupMethodTests.java b/spring-beans/src/test/java/org/springframework/beans/factory/support/LookupMethodTests.java index 21e6c72a7c..dac823f368 100644 --- a/spring-beans/src/test/java/org/springframework/beans/factory/support/LookupMethodTests.java +++ b/spring-beans/src/test/java/org/springframework/beans/factory/support/LookupMethodTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2014 the original author or authors. + * Copyright 2002-2015 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. @@ -90,6 +90,16 @@ public class LookupMethodTests { } } + @Test + public void testWithOverriddenLookupMethod() { + AbstractBean bean = (AbstractBean) beanFactory.getBean("extendedBean"); + assertNotNull(bean); + TestBean expected = bean.getOneArgument("haha"); + assertEquals(TestBean.class, expected.getClass()); + assertEquals("haha", expected.getName()); + assertTrue(expected.isJedi()); + } + public static abstract class AbstractBean { diff --git a/spring-beans/src/test/resources/org/springframework/beans/factory/support/lookupMethodTests.xml b/spring-beans/src/test/resources/org/springframework/beans/factory/support/lookupMethodTests.xml index 54f6dcba00..48d9bc1121 100644 --- a/spring-beans/src/test/resources/org/springframework/beans/factory/support/lookupMethodTests.xml +++ b/spring-beans/src/test/resources/org/springframework/beans/factory/support/lookupMethodTests.xml @@ -9,6 +9,14 @@ + + + + + + + +