diff --git a/org.springframework.beans/src/main/java/org/springframework/beans/factory/support/AbstractAutowireCapableBeanFactory.java b/org.springframework.beans/src/main/java/org/springframework/beans/factory/support/AbstractAutowireCapableBeanFactory.java index 805e680860..fea31a4ea6 100644 --- a/org.springframework.beans/src/main/java/org/springframework/beans/factory/support/AbstractAutowireCapableBeanFactory.java +++ b/org.springframework.beans/src/main/java/org/springframework/beans/factory/support/AbstractAutowireCapableBeanFactory.java @@ -1124,24 +1124,27 @@ public abstract class AbstractAutowireCapableBeanFactory extends AbstractBeanFac for (String propertyName : propertyNames) { try { PropertyDescriptor pd = bw.getPropertyDescriptor(propertyName); - MethodParameter methodParam = BeanUtils.getWriteMethodParameter(pd); - // Do not allow eager init for type matching in case of a prioritized post-processor. - boolean eager = !PriorityOrdered.class.isAssignableFrom(bw.getWrappedClass()); - DependencyDescriptor desc = new DependencyDescriptor(methodParam, false, eager); - - Object autowiredArgument = resolveDependency(desc, beanName, autowiredBeanNames, converter); - if (autowiredArgument != null) { - pvs.add(propertyName, autowiredArgument); - } - 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 + "'"); + // Don't try autowiring by type for type Object: never makes sense, + // even if it technically is a unsatisfied, non-simple property. + if (!Object.class.equals(pd.getPropertyType())) { + MethodParameter methodParam = BeanUtils.getWriteMethodParameter(pd); + // Do not allow eager init for type matching in case of a prioritized post-processor. + boolean eager = !PriorityOrdered.class.isAssignableFrom(bw.getWrappedClass()); + DependencyDescriptor desc = new DependencyDescriptor(methodParam, false, eager); + Object autowiredArgument = resolveDependency(desc, beanName, autowiredBeanNames, converter); + if (autowiredArgument != null) { + pvs.add(propertyName, autowiredArgument); + } + 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) { throw new UnsatisfiedDependencyException(mbd.getResourceDescription(), beanName, propertyName, ex);