protected @Autowired method can be overridden with non-annotated method to suppress injection; private @Autowired methods with same signature will be called individually across a hierarchy (SPR-6112)

This commit is contained in:
Juergen Hoeller
2009-09-15 15:52:13 +00:00
parent fa2bb722f0
commit fd81aa205d
3 changed files with 65 additions and 17 deletions

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2002-2008 the original author or authors.
* Copyright 2002-2009 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.
@@ -21,7 +21,7 @@ import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Member;
import java.lang.reflect.Method;
import java.util.Arrays;
import java.util.Collection;
import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.Set;
@@ -83,7 +83,7 @@ public class InjectionMetadata {
doRegisterConfigMembers(beanDefinition, this.injectedMethods);
}
private void doRegisterConfigMembers(RootBeanDefinition beanDefinition, Set<InjectedElement> members) {
private void doRegisterConfigMembers(RootBeanDefinition beanDefinition, Collection<InjectedElement> members) {
for (Iterator<InjectedElement> it = members.iterator(); it.hasNext();) {
Member member = it.next().getMember();
if (!beanDefinition.isExternallyManagedConfigMember(member)) {
@@ -231,15 +231,7 @@ public class InjectionMetadata {
return false;
}
InjectedElement otherElement = (InjectedElement) other;
if (this.isField) {
return this.member.equals(otherElement.member);
}
else {
return (otherElement.member instanceof Method &&
this.member.getName().equals(otherElement.member.getName()) &&
Arrays.equals(((Method) this.member).getParameterTypes(),
((Method) otherElement.member).getParameterTypes()));
}
return this.member.equals(otherElement.member);
}
@Override