do not ever consider Object as a candidate type for autowiring by type (SPR-6600)

This commit is contained in:
Juergen Hoeller 2010-02-18 00:04:08 +00:00
parent e74b33242b
commit 572abbcff9
1 changed files with 19 additions and 16 deletions

View File

@ -1124,24 +1124,27 @@ public abstract class AbstractAutowireCapableBeanFactory extends AbstractBeanFac
for (String propertyName : propertyNames) { for (String propertyName : propertyNames) {
try { try {
PropertyDescriptor pd = bw.getPropertyDescriptor(propertyName); PropertyDescriptor pd = bw.getPropertyDescriptor(propertyName);
MethodParameter methodParam = BeanUtils.getWriteMethodParameter(pd); // Don't try autowiring by type for type Object: never makes sense,
// Do not allow eager init for type matching in case of a prioritized post-processor. // even if it technically is a unsatisfied, non-simple property.
boolean eager = !PriorityOrdered.class.isAssignableFrom(bw.getWrappedClass()); if (!Object.class.equals(pd.getPropertyType())) {
DependencyDescriptor desc = new DependencyDescriptor(methodParam, false, eager); MethodParameter methodParam = BeanUtils.getWriteMethodParameter(pd);
// Do not allow eager init for type matching in case of a prioritized post-processor.
Object autowiredArgument = resolveDependency(desc, beanName, autowiredBeanNames, converter); boolean eager = !PriorityOrdered.class.isAssignableFrom(bw.getWrappedClass());
if (autowiredArgument != null) { DependencyDescriptor desc = new DependencyDescriptor(methodParam, false, eager);
pvs.add(propertyName, autowiredArgument); Object autowiredArgument = resolveDependency(desc, beanName, autowiredBeanNames, converter);
} if (autowiredArgument != null) {
for (String autowiredBeanName : autowiredBeanNames) { pvs.add(propertyName, autowiredArgument);
registerDependentBean(autowiredBeanName, beanName);
if (logger.isDebugEnabled()) {
logger.debug(
"Autowiring by type from bean name '" + beanName + "' via property '" + propertyName +
"' to bean named '" + autowiredBeanName + "'");
} }
for (String autowiredBeanName : autowiredBeanNames) {
registerDependentBean(autowiredBeanName, beanName);
if (logger.isDebugEnabled()) {
logger.debug(
"Autowiring by type from bean name '" + beanName + "' via property '" + propertyName +
"' to bean named '" + autowiredBeanName + "'");
}
}
autowiredBeanNames.clear();
} }
autowiredBeanNames.clear();
} }
catch (BeansException ex) { catch (BeansException ex) {
throw new UnsatisfiedDependencyException(mbd.getResourceDescription(), beanName, propertyName, ex); throw new UnsatisfiedDependencyException(mbd.getResourceDescription(), beanName, propertyName, ex);