Lookup method definitions can be overridden in child beans
Issue: SPR-13388
This commit is contained in:
parent
b198cad58e
commit
74e6213baf
|
@ -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<MethodOverride> overrides = new HashSet<MethodOverride>(0);
|
||||
private final Set<MethodOverride> overrides = new LinkedHashSet<MethodOverride>(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) {
|
||||
|
|
|
@ -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 {
|
||||
|
||||
|
|
|
@ -9,6 +9,14 @@
|
|||
<lookup-method name="getTwoArguments" bean="testBean"/>
|
||||
</bean>
|
||||
|
||||
<bean id="extendedBean" parent="abstractBean">
|
||||
<lookup-method name="getOneArgument" bean="jedi"/>
|
||||
</bean>
|
||||
|
||||
<bean id="testBean" class="org.springframework.tests.sample.beans.TestBean" scope="prototype"/>
|
||||
|
||||
<bean id="jedi" class="org.springframework.tests.sample.beans.TestBean" scope="prototype" autowire-candidate="false">
|
||||
<property name="jedi" value="true"/>
|
||||
</bean>
|
||||
|
||||
</beans>
|
||||
|
|
Loading…
Reference in New Issue