storing type information as specified (SPR-5556, SPR-5562); explicit XML array element in spring-beans-3.0.xsd (SPR-5543)

This commit is contained in:
Juergen Hoeller
2009-04-15 22:27:32 +00:00
parent 5a561bcd07
commit 1b5812da20
17 changed files with 1568 additions and 202 deletions

View File

@@ -0,0 +1,380 @@
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<bean id="jenny" class="test.beans.TestBean">
<property name="name"><value>Jenny</value></property>
<property name="age"><value>30</value></property>
<property name="spouse">
<!-- Could use id and href -->
<ref local="david"/>
</property>
</bean>
<bean id="david" class="test.beans.TestBean">
<description>
Simple bean, without any collections.
</description>
<property name="name">
<description>The name of the user</description>
<value>David</value>
</property>
<property name="age"><value>27</value></property>
</bean>
<bean id="rod" class="test.beans.TestBean">
<property name="name"><value>Rod</value></property>
<property name="age"><value>32</value></property>
<property name="friends">
<description>List of Rod's friends</description>
<list>
<ref local="jenny"/>
<ref local="david"/>
</list>
</property>
</bean>
<bean id="pJenny" class="test.beans.TestBean" scope="prototype">
<property name="name"><value>Jenny</value></property>
<property name="age"><value>30</value></property>
<property name="spouse">
<!-- Could use id and href -->
<ref local="david"/>
</property>
</bean>
<bean id="pDavid" class="test.beans.TestBean" scope="prototype">
<property name="name"><value>David</value></property>
<property name="age"><value>27</value></property>
</bean>
<bean id="pRod" class="test.beans.TestBean" scope="prototype">
<property name="name"><value>Rod</value></property>
<property name="age"><value>32</value></property>
<property name="friends">
<list>
<ref local="pJenny"/>
<ref local="pDavid"/>
</list>
</property>
</bean>
<!--
Try setting a collection property to a single value
-->
<bean id="loner" class="test.beans.TestBean">
<property name="name"><value>loner</value></property>
<property name="age"><value>26</value></property>
<property name="friends">
<list>
<description>My List</description>
<ref local="david"/>
</list>
</property>
</bean>
<bean id="jumble" class="org.springframework.beans.factory.xml.MixedCollectionBean">
<property name="jumble">
<list>
<ref local="david"/>
<value>literal</value>
<ref local="jenny"/>
<idref local="rod"/>
<array>
<ref local="david"/>
<value>literal2</value>
</array>
</list>
</property>
</bean>
<bean id="jumble2" class="org.springframework.beans.factory.xml.MixedCollectionBean" lazy-init="true">
<property name="jumble">
<list>
<ref local="david"/>
<value>literal</value>
<ref local="jenny"/>
<idref bean="rod"/>
<idref bean="rod2"/>
</list>
</property>
</bean>
<bean id="verbose" class="test.beans.TestBean">
<property name="name"><value>verbose</value></property>
</bean>
<bean id="verbose2" class="test.beans.TestBean">
<property name="name"><idref local="verbose"/></property>
</bean>
<bean id="verbose3" class="test.beans.TestBean">
<property name="name"><idref bean="verbose"/></property>
</bean>
<bean id="emptyMap" class="org.springframework.beans.factory.xml.HasMap">
<property name="map">
<map>
</map>
</property>
</bean>
<bean id="literalMap" class="org.springframework.beans.factory.xml.HasMap">
<property name="map">
<map>
<entry key="foo" value="bar"/>
<entry key="fi" value="fum"/>
<entry key="fa"><null/></entry>
</map>
</property>
</bean>
<bean id="mixedMap" class="org.springframework.beans.factory.xml.HasMap">
<property name="map">
<map>
<entry key-ref="fooKey">
<value type="java.lang.Integer">10</value>
</entry>
<entry>
<key>
<ref bean="jennyKey"/>
</key>
<ref local="jenny"/>
</entry>
<entry>
<key>
<bean class="java.lang.Integer">
<constructor-arg value="5"/>
</bean>
</key>
<idref bean="david"/>
</entry>
</map>
</property>
</bean>
<bean id="fooKey" class="java.lang.String">
<constructor-arg value="foo"/>
</bean>
<bean id="jennyKey" class="java.lang.String">
<constructor-arg value="jenny"/>
</bean>
<bean id="pMixedMap" class="org.springframework.beans.factory.xml.HasMap" scope="prototype">
<property name="map">
<map>
<entry key="foo" value="bar"/>
<entry key="jenny" value-ref="pJenny"/>
</map>
</property>
</bean>
<bean id="mixedMapWithList" class="org.springframework.beans.factory.xml.HasMap">
<property name="map">
<map>
<entry>
<key><null/></key>
<value>bar</value>
</entry>
<entry key="jenny"><ref local="jenny"/></entry>
<entry key="list">
<list>
<value>zero</value>
<map>
<entry key="fo"><value>bar</value></entry>
<entry key="jen"><ref local="jenny"/></entry>
</map>
<list>
<ref local="jenny"/>
<value>ba</value>
</list>
<null/>
</list>
</entry>
<entry key="map">
<map>
<entry key="foo"><value>bar</value></entry>
<entry key="jenny"><ref local="jenny"/></entry>
</map>
</entry>
</map>
</property>
</bean>
<bean id="emptySet" class="org.springframework.beans.factory.xml.HasMap">
<property name="set">
<set>
</set>
</property>
</bean>
<bean id="set" class="org.springframework.beans.factory.xml.HasMap">
<property name="set">
<set>
<value>bar</value>
<ref local="jenny"/>
<null/>
</set>
</property>
</bean>
<bean id="emptyProps" class="org.springframework.beans.factory.xml.HasMap">
<property name="props">
<props>
</props>
</property>
</bean>
<bean id="props" class="org.springframework.beans.factory.xml.HasMap">
<property name="props">
<props>
<prop key="foo">bar</prop>
<prop key="2">TWO</prop>
</props>
</property>
</bean>
<bean id="propsViaMap" class="org.springframework.beans.factory.xml.HasMap">
<property name="props">
<map>
<entry key="foo" value="bar"/>
<entry key="2" value="TWO"/>
</map>
</property>
</bean>
<bean id="objectArray" class="org.springframework.beans.factory.xml.HasMap">
<property name="objectArray">
<list>
<value>one</value>
<ref local="jenny"/>
</list>
</property>
</bean>
<bean id="classArray" class="org.springframework.beans.factory.xml.HasMap">
<property name="classArray">
<list>
<value>java.lang.String</value>
<value>java.lang.Exception</value>
</list>
</property>
</bean>
<bean id="integerArray" class="org.springframework.beans.factory.xml.HasMap">
<property name="integerArray">
<list>
<value>0</value>
<value>1</value>
<value>2</value>
</list>
</property>
</bean>
<bean id="listFactory" class="org.springframework.beans.factory.config.ListFactoryBean">
<property name="sourceList">
<list>
<value>bar</value>
<value>jenny</value>
</list>
</property>
<property name="targetListClass">
<value>java.util.LinkedList</value>
</property>
</bean>
<bean id="pListFactory" class="org.springframework.beans.factory.config.ListFactoryBean">
<property name="sourceList">
<list>
<value>bar</value>
<value>jenny</value>
</list>
</property>
<property name="targetListClass">
<value>java.util.LinkedList</value>
</property>
<property name="singleton">
<value>true</value>
</property>
</bean>
<bean id="setFactory" class="org.springframework.beans.factory.config.SetFactoryBean">
<property name="sourceSet">
<set>
<value>bar</value>
<value>jenny</value>
</set>
</property>
<property name="targetSetClass">
<value>java.util.TreeSet</value>
</property>
</bean>
<bean id="pSetFactory" class="org.springframework.beans.factory.config.SetFactoryBean">
<property name="sourceSet">
<set>
<value>bar</value>
<value>jenny</value>
</set>
</property>
<property name="targetSetClass">
<value>java.util.TreeSet</value>
</property>
<property name="singleton">
<value>true</value>
</property>
</bean>
<bean id="mapFactory" class="org.springframework.beans.factory.config.MapFactoryBean">
<property name="sourceMap">
<map>
<entry key="foo"><value>bar</value></entry>
<entry key="jen"><value>jenny</value></entry>
</map>
</property>
<property name="targetMapClass">
<value>java.util.TreeMap</value>
</property>
</bean>
<bean id="pMapFactory" class="org.springframework.beans.factory.config.MapFactoryBean">
<property name="sourceMap">
<map>
<entry key="foo"><value>bar</value></entry>
<entry key="jen"><value>jenny</value></entry>
</map>
</property>
<property name="targetMapClass">
<value>java.util.TreeMap</value>
</property>
<property name="singleton">
<value>true</value>
</property>
</bean>
<bean id="setAndMap" class="org.springframework.beans.factory.xml.XmlBeanCollectionTests$MapAndSet">
<constructor-arg>
<map>
<description>My Map</description>
<entry key="key1" value="val1"/>
<entry key="key2" value="val2"/>
<entry key="key3" value="val3"/>
</map>
</constructor-arg>
</bean>
<bean id="enumSetFactory" class="org.springframework.beans.factory.config.SetFactoryBean">
<property name="sourceSet">
<set>
<description>My Set</description>
<value type="java.lang.String">ONE</value>
<value type="java.lang.String">TWO</value>
</set>
</property>
</bean>
</beans>

View File

@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN"
"http://www.springframework.org/dtd/spring-beans-2.0.dtd">
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<beans>
<bean id="testBean" class="test.beans.TestBean">
<property name="someList">
<list value-type="java.lang.Integer">
@@ -58,4 +58,21 @@
</map>
</property>
</bean>
</beans>
<bean id="jumble" class="org.springframework.beans.factory.xml.MixedCollectionBean">
<property name="jumble">
<list value-type="java.lang.String">
<value>literal</value>
<array value-type="java.lang.Integer">
<value>2</value>
<value>4</value>
</array>
<array value-type="int">
<value>3</value>
<value>5</value>
</array>
</list>
</property>
</bean>
</beans>

View File

@@ -0,0 +1,149 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd">
<beans>
<bean id="default" class="org.springframework.beans.factory.xml.FactoryMethods"
factory-method="defaultInstance">
<!-- No constructor-arg elements -->
<property name="stringValue"><value>setterString</value></property>
</bean>
<bean id="defaultTestBean" factory-bean="default" factory-method="getTestBean"
init-method="haveBirthday" destroy-method="destroy"/>
<bean id="defaultTestBeanWithInvalidDestroyMethod" factory-bean="default" factory-method="getTestBean"
init-method="haveBirthday" destroy-method="xxx" lazy-init="true"/>
<bean id="defaultTestBean.protected" factory-bean="default" factory-method="protectedGetTestBean"
init-method="haveBirthday" destroy-method="destroy"/>
<bean id="defaultTestBean.private" factory-bean="default" factory-method="privateGetTestBean"
init-method="haveBirthday" destroy-method="destroy"/>
<bean id="testBeanOnly" class="org.springframework.beans.factory.xml.FactoryMethods"
factory-method="newInstance">
<constructor-arg><ref local="juergen"/></constructor-arg>
</bean>
<bean id="null" class="org.springframework.beans.factory.xml.FactoryMethods"
factory-method="nullInstance"/>
<bean id="nullWithProperty" class="org.springframework.beans.factory.xml.FactoryMethods"
factory-method="nullInstance" init-method="getName" scope="prototype">
<property name="stringValue"><value>setterString</value></property>
</bean>
<bean id="full" class="org.springframework.beans.factory.xml.FactoryMethods"
factory-method="newInstance">
<constructor-arg index="0"><ref local="juergen"/></constructor-arg>
<constructor-arg index="1"><value>27</value></constructor-arg>
<constructor-arg index="2"><value>gotcha</value></constructor-arg>
</bean>
<bean id="fullWithNull" class="org.springframework.beans.factory.xml.FactoryMethods"
factory-method="newInstance">
<constructor-arg index="0"><ref local="juergen"/></constructor-arg>
<constructor-arg index="1"><value>27</value></constructor-arg>
<constructor-arg index="2" type="java.lang.Integer"><null/></constructor-arg>
</bean>
<bean id="fullWithGenericNull" class="org.springframework.beans.factory.xml.FactoryMethods"
factory-method="newInstance">
<constructor-arg><ref local="juergen"/></constructor-arg>
<constructor-arg type="int"><value>27</value></constructor-arg>
<constructor-arg type="java.lang.Integer"><null/></constructor-arg>
</bean>
<bean id="fullWithAutowire" class="org.springframework.beans.factory.xml.FactoryMethods"
factory-method="newInstance" autowire="constructor">
<constructor-arg index="0" ref="juergen"/>
<constructor-arg index="1" value="27"/>
</bean>
<bean id="stringToBeAutowired" class="java.lang.String">
<constructor-arg value="gotchaAutowired"/>
</bean>
<bean id="defaultPrototype" class="org.springframework.beans.factory.xml.FactoryMethods"
scope="prototype" factory-method="defaultInstance">
<!-- No constructor-arg elements -->
<property name="stringValue"><value>setterString</value></property>
</bean>
<bean id="testBeanOnlyPrototype" class="org.springframework.beans.factory.xml.FactoryMethods"
factory-method="newInstance" scope="prototype">
<constructor-arg><ref local="juergen"/></constructor-arg>
<property name="stringValue"><value>testBeanOnlyPrototypeDISetterString</value></property>
</bean>
<bean id="fullPrototype" class="org.springframework.beans.factory.xml.FactoryMethods"
factory-method="newInstance" scope="prototype">
<constructor-arg type="int"><value>27</value></constructor-arg>
<constructor-arg><value>gotcha</value></constructor-arg>
<constructor-arg><ref local="juergen"/></constructor-arg>
</bean>
<bean id="noMatchPrototype" class="org.springframework.beans.factory.xml.FactoryMethods"
factory-method="newInstance" scope="prototype">
<constructor-arg index="0"><ref local="juergen"/></constructor-arg>
<constructor-arg index="1"><value>27</value></constructor-arg>
<constructor-arg index="2"><value>gotcha</value></constructor-arg>
<constructor-arg index="3"><value>bogus</value></constructor-arg>
</bean>
<bean id="listInstance" class="org.springframework.beans.factory.xml.FactoryMethods"
factory-method="listInstance"/>
<bean id="juergen" class="test.beans.TestBean">
<property name="name"><value>Juergen</value></property>
</bean>
<!--
The class is the factory class, not the created class.
-->
<bean id="externalFactoryMethodWithoutArgs"
class="org.springframework.beans.factory.xml.TestBeanCreator"
factory-method="createTestBean">
</bean>
<bean id="externalFactoryMethodWithArgs" class="org.springframework.beans.factory.xml.TestBeanCreator"
factory-method="createTestBean">
<constructor-arg index="0"><value>Rod</value></constructor-arg>
<constructor-arg><value type="java.lang.Integer">33</value></constructor-arg>
</bean>
<bean id="instanceFactoryMethodWithoutArgs"
factory-bean="instanceFactory"
factory-method="defaultInstance"/>
<!-- Unnamed bean with factory-bean declaration -->
<bean factory-bean="instanceFactory" factory-method="defaultInstance"/>
<bean id="testBeanWithInnerFactoryMethod" class="test.beans.TestBean">
<property name="friends">
<list>
<!-- Unnamed bean with factory-bean declaration -->
<bean factory-bean="instanceFactory" factory-method="defaultInstance"/>
</list>
</property>
</bean>
<bean id="instanceFactory" class="org.springframework.beans.factory.xml.InstanceFactory" scope="singleton">
<property name="factoryBeanProperty"><value>instanceFactory</value></property>
</bean>
<bean name="javaMailSession" class="org.springframework.beans.factory.xml.MailSession"
factory-method="getDefaultInstance">
<constructor-arg>
<props>
<prop key="mail.smtp.auth">true</prop>
<prop key="mail.smtp.host"></prop>
<prop key="mail.smtp.port"></prop>
<prop key="mail.smtp.user">someuser</prop>
<prop key="mail.smtp.password">somepw</prop>
</props>
</constructor-arg>
</bean>
</beans>