From 74e6213bafd70cc7727a2b7ac91b5d9f3bf5011f Mon Sep 17 00:00:00 2001 From: Juergen Hoeller Date: Tue, 25 Aug 2015 17:08:49 +0200 Subject: [PATCH] Lookup method definitions can be overridden in child beans Issue: SPR-13388 --- .../beans/factory/support/MethodOverrides.java | 15 +++++++++------ .../beans/factory/support/LookupMethodTests.java | 12 +++++++++++- .../beans/factory/support/lookupMethodTests.xml | 8 ++++++++ 3 files changed, 28 insertions(+), 7 deletions(-) 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 @@ + + + + + + + +