constructor argument type matching supports arrays and simple class names now (SPR-5844)

This commit is contained in:
Juergen Hoeller
2009-07-16 11:25:52 +00:00
parent 35b2a7e612
commit cf29d1c367
4 changed files with 72 additions and 3 deletions

View File

@@ -158,6 +158,10 @@
<constructor-arg value="false"/>
</bean>
<bean id="nan" class="java.lang.Double" factory-method="valueOf">
<constructor-arg value="NaN" type="double"/>
</bean>
<bean id="beanWithDoubleBoolean" class="org.springframework.beans.factory.xml.XmlBeanFactoryTests$DoubleBooleanConstructorBean" autowire="constructor" scope="prototype">
<constructor-arg type="java.lang.Boolean"><value>true</value></constructor-arg>
</bean>
@@ -166,4 +170,20 @@
<constructor-arg index="1"><value>true</value></constructor-arg>
</bean>
<bean id="constructorArray" class="org.springframework.beans.factory.xml.XmlBeanFactoryTests$ConstructorArrayTestBean">
<constructor-arg type="int[]">
<array value-type="int">
<value>1</value>
</array>
</constructor-arg>
</bean>
<bean id="indexedConstructorArray" class="org.springframework.beans.factory.xml.XmlBeanFactoryTests$ConstructorArrayTestBean">
<constructor-arg index="0" type="int[]">
<array value-type="int">
<value>1</value>
</array>
</constructor-arg>
</bean>
</beans>

View File

@@ -1363,6 +1363,22 @@ public final class XmlBeanFactoryTests {
assertEquals(Boolean.TRUE, bean.boolean2);
}
public @Test void testPrimitiveConstructorArray() {
XmlBeanFactory xbf = new XmlBeanFactory(CONSTRUCTOR_ARG_CONTEXT);
ConstructorArrayTestBean bean = (ConstructorArrayTestBean) xbf.getBean("constructorArray");
assertTrue(bean.array instanceof int[]);
assertEquals(1, ((int[]) bean.array).length);
assertEquals(1, ((int[]) bean.array)[0]);
}
public @Test void testIndexedPrimitiveConstructorArray() {
XmlBeanFactory xbf = new XmlBeanFactory(CONSTRUCTOR_ARG_CONTEXT);
ConstructorArrayTestBean bean = (ConstructorArrayTestBean) xbf.getBean("indexedConstructorArray");
assertTrue(bean.array instanceof int[]);
assertEquals(1, ((int[]) bean.array).length);
assertEquals(1, ((int[]) bean.array)[0]);
}
public @Test void testWithDuplicateName() throws Exception {
try {
new XmlBeanFactory(TEST_WITH_DUP_NAMES_CONTEXT);
@@ -1590,6 +1606,24 @@ public final class XmlBeanFactoryTests {
}
public static class ConstructorArrayTestBean {
public final Object array;
public ConstructorArrayTestBean(int[] array) {
this.array = array;
}
public ConstructorArrayTestBean(float[] array) {
this.array = array;
}
public ConstructorArrayTestBean(short[] array) {
this.array = array;
}
}
public static class WrappingPostProcessor implements BeanPostProcessor {
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {