diff --git a/spring-beans/src/main/java/org/springframework/beans/TypeConverterDelegate.java b/spring-beans/src/main/java/org/springframework/beans/TypeConverterDelegate.java
index a3bfd17bc16..2fc9486c50f 100644
--- a/spring-beans/src/main/java/org/springframework/beans/TypeConverterDelegate.java
+++ b/spring-beans/src/main/java/org/springframework/beans/TypeConverterDelegate.java
@@ -49,6 +49,7 @@ import org.springframework.util.StringUtils;
* @author Juergen Hoeller
* @author Rob Harrop
* @author Dave Syer
+ * @author Yanming Zhou
* @since 2.0
* @see BeanWrapperImpl
* @see SimpleTypeConverter
@@ -178,15 +179,15 @@ class TypeConverterDelegate {
return (T) convertToTypedArray(convertedValue, propertyName, requiredType.componentType());
}
else if (convertedValue.getClass().isArray()) {
- if (Array.getLength(convertedValue) == 1) {
- convertedValue = Array.get(convertedValue, 0);
- standardConversion = true;
- }
- else if (Collection.class.isAssignableFrom(requiredType)) {
+ if (Collection.class.isAssignableFrom(requiredType)) {
convertedValue = convertToTypedCollection(CollectionUtils.arrayToList(convertedValue),
propertyName, requiredType, typeDescriptor);
standardConversion = true;
}
+ else if (Array.getLength(convertedValue) == 1) {
+ convertedValue = Array.get(convertedValue, 0);
+ standardConversion = true;
+ }
}
else if (convertedValue instanceof Collection> coll) {
// Convert elements to target type, if determined.
diff --git a/spring-context/src/test/java/org/springframework/context/support/ClassPathXmlApplicationContextTests.java b/spring-context/src/test/java/org/springframework/context/support/ClassPathXmlApplicationContextTests.java
index 170b1b65613..449518aeab3 100644
--- a/spring-context/src/test/java/org/springframework/context/support/ClassPathXmlApplicationContextTests.java
+++ b/spring-context/src/test/java/org/springframework/context/support/ClassPathXmlApplicationContextTests.java
@@ -48,6 +48,7 @@ import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
* @author Juergen Hoeller
* @author Chris Beams
* @author Sam Brannen
+ * @author Yanming Zhou
*/
public class ClassPathXmlApplicationContextTests {
@@ -223,6 +224,10 @@ public class ClassPathXmlApplicationContextTests {
Service service = ctx.getBean("service", Service.class);
assertThat(service.getResources()).containsExactlyInAnyOrder(contextA, contextB, contextC);
assertThat(service.getResourceSet()).containsExactlyInAnyOrder(contextA, contextB, contextC);
+
+ Service service3 = ctx.getBean("service3", Service.class);
+ assertThat(service3.getResources()).containsOnly(new ClassPathResource(FQ_CONTEXT_A));
+ assertThat(service3.getResourceSet()).containsOnly(new ClassPathResource(FQ_CONTEXT_A));
ctx.close();
}
diff --git a/spring-context/src/test/resources/org/springframework/context/support/test/contextA.xml b/spring-context/src/test/resources/org/springframework/context/support/test/contextA.xml
index d58a2e82587..7a140cfdaad 100644
--- a/spring-context/src/test/resources/org/springframework/context/support/test/contextA.xml
+++ b/spring-context/src/test/resources/org/springframework/context/support/test/contextA.xml
@@ -24,6 +24,11 @@
+
+
+
+
+