配置集合属性
1.List 实例代码(SequenceGenerator.java + beans.xml + Main.java):
SequenceGenerator.java
package com.apress.springrecipes.sequence;
import java.util.List;
public class SequenceGenerator {
private List<Object> suffixes;
private int initial;
private int counter;
public SequenceGenerator() {}
public void setSuffixes(List<Object> suffixes) {
this.suffixes = suffixes;
}
public void setInitial(int initial) {
this.initial = initial;
}
public synchronized String getSequence() {
StringBuffer buffer = new StringBuffer();
buffer.append(initial + counter++);
for (Object suffix : suffixes)
buffer.append("-").append(suffix);
return buffer.toString();
}
}
beans.xml
<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="sequenceGenerator" class="com.apress.springrecipes.sequence.SequenceGenerator">
<property name="initial" value="100000"/>
<property name="suffixes">
<list>
<value>A</value>
<bean class="java.net.URL">
<constructor-arg value="http"/>
<constructor-arg value="www.apress.com"/>
<constructor-arg value="/"/>
</bean>
<null />
</list>
</property>
</bean>
</beans>
Main.java
package com.apress.springrecipes.sequence;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Main {
public static void main(String[] args) {
ApplicationContext context =
new ClassPathXmlApplicationContext("beans.xml");
SequenceGenerator generator =
(SequenceGenerator) context.getBean("sequenceGenerator");
System.out.println(generator.getSequence());
System.out.println(generator.getSequence());
}
}
控制台输出结果
100000-A-http://www.apress.com/-null
100001-A-http://www.apress.com/-null
2.Array 实例代码(SequenceGenerator.java + beans.xml + Main.java):
只需要修改SequenceGenerator.java,其它代码同List
SequenceGenerator.java
package com.apress.springrecipes.sequence;
public class SequenceGenerator {
private Object[] suffixes;
private int initial;
private int counter;
public SequenceGenerator() {}
public void setSuffixes( Object[] suffixes) {
this.suffixes = suffixes;
}
public void setInitial(int initial) {
this.initial = initial;
}
public synchronized String getSequence() {
StringBuffer buffer = new StringBuffer();
buffer.append(initial + counter++);
for (Object suffix : suffixes)
buffer.append("-").append(suffix);
return buffer.toString();
}
}
beans.xml(同上,1. List)
Main.java(同上,1. List)
控制台输出结果(同上,1. List)
3.Set 实例代码(SequenceGenerator.java + beans.xml + Main.java):
SequenceGenerator.java
package com.apress.springrecipes.sequence;
import java.util.Set;
public class SequenceGenerator {
private Set<Object> suffixes;
private int initial;
private int counter;
public SequenceGenerator() {}
public void setSuffixes( Set<Object> suffixes) {
this.suffixes = suffixes;
}
public void setInitial(int initial) {
this.initial = initial;
}
public synchronized String getSequence() {
StringBuffer buffer = new StringBuffer();
buffer.append(initial + counter++);
for (Object suffix : suffixes)
buffer.append("-").append(suffix);
return buffer.toString();
}
}
beans.xml,注:Spring默认使用LinkedHashSet所以保证了顺序
<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="sequenceGenerator" class="com.apress.springrecipes.sequence.SequenceGenerator">
<property name="initial" value="100000"/>
<property name="suffixes">
<set>
<value>A</value>
<bean class="java.net.URL">
<constructor-arg value="http"/>
<constructor-arg value="www.apress.com"/>
<constructor-arg value="/"/>
</bean>
<null />
</set>
</property>
</bean>
</beans>
Main.java(同上,1. List)
控制台输出结果(同上,1. List)
4.Map 实例代码(SequenceGenerator.java + beans.xml + Main.java):
SequenceGenerator.java
package com.apress.springrecipes.sequence;
import java.util.Map;
public class SequenceGenerator {
private Map<Object, Object> suffixes;
private int initial;
private int counter;
public SequenceGenerator() {}
public void setSuffixes( Map<Object, Object> suffixes) {
this.suffixes = suffixes;
}
public void setInitial(int initial) {
this.initial = initial;
}
public synchronized String getSequence() {
StringBuffer buffer = new StringBuffer();
buffer.append(initial + counter++);
for (Map.Entry entry : suffixes.entrySet())
buffer.append("-")
.append(entry.getKey())
.append("@")
.append(entry.getValue());
return buffer.toString();
}
}
beans.xml
<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="sequenceGenerator" class="com.apress.springrecipes.sequence.SequenceGenerator">
<property name="initial" value="100000"/>
<property name="suffixes">
<map>
<entry>
<key>
<value>type</value>
</key>
<value>A</value>
</entry>
<entry>
<key>
<value>url</value>
</key>
<bean class="java.net.URL">
<constructor-arg value="http"/>
<constructor-arg value="www.apress.com"/>
<constructor-arg value="/"/>
</bean>
</entry>
</map>
</property>
</bean>
</beans>
beans.xml,简写
<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="sequenceGenerator" class="com.apress.springrecipes.sequence.SequenceGenerator">
<property name="initial" value="100000"/>
<property name="suffixes">
<map>
<entry key="type" value="A"/>
<entry key="url">
<bean class="java.net.URL">
<constructor-arg value="http"/>
<constructor-arg value="www.apress.com"/>
<constructor-arg value="/"/>
</bean>
</entry>
</map>
</property>
</bean>
</beans>
Main.java(同上,1. List)
控制台输出结果
100000-type@A-url@http://www.apress.com/
100001-type@A-url@http://www.apress.com/
注:配置空值Map
<property name="nulledMapValue">
<map>
<entry>
<key><value>null</value></key>
</entry>
</map>
</property>
5.Properties 实例代码(SequenceGenerator.java + beans.xml + Main.java):
SequenceGenerator.java
package com.apress.springrecipes.sequence;
import java.util.Map;
import java.util.Properties;
public class SequenceGenerator {
private Properties suffixes;
private int initial;
private int counter;
public SequenceGenerator() {}
public void setSuffixes(Properties suffixes) {
this.suffixes = suffixes;
}
public void setInitial(int initial) {
this.initial = initial;
}
public synchronized String getSequence() {
StringBuffer buffer = new StringBuffer();
buffer.append(initial + counter++);
for (Map.Entry entry : suffixes.entrySet())
buffer.append("-")
.append(entry.getKey())
.append("@")
.append(entry.getValue());
return buffer.toString();
}
}
beans.xml
<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="sequenceGenerator" class="com.apress.springrecipes.sequence.SequenceGenerator">
<property name="initial" value="100000"/>
<property name="suffixes">
<props>
<prop key="type">A</prop>
<prop key="url">http://www.apress.com/</prop>
<prop key="null">null</prop>
</props>
</property>
</bean>
</beans>
Main.java(同上,1. List)
控制台输出结果
100000-null@null-url@http://www.apress.com/-type@A
100001-null@null-url@http://www.apress.com/-type@A
合并父Bean集合
1.List 实例代码(SequenceGenerator.java + beans.xml + Main.java):
SequenceGenerator.java(同上,1. List)
beans.xml
<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="baseSequenceGenerator" class="com.apress.springrecipes.sequence.SequenceGenerator">
<property name="initial" value="100000"/>
<property name="suffixes">
<list>
<value>A</value>
<value>B</value>
</list>
</property>
</bean>
<bean id="sequenceGenerator" parent="baseSequenceGenerator">
<property name="suffixes">
<list merge="true">
<value>A</value>
<value>C</value>
</list>
</property>
</bean>
</beans>
Main.java(同上,1. List)
控制台输出结果
100000-A-B-A-C
100001-A-B-A-C
2.Set,Map 实例代码(SequenceGenerator.java + beans.xml + Main.java):
注:Set,Map如果值相同,子元素将覆盖父元素。
SequenceGenerator.java(同上,3. Set)
beans.xml
<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="baseSequenceGenerator" class="com.apress.springrecipes.sequence.SequenceGenerator">
<property name="initial" value="100000"/>
<property name="suffixes">
<set>
<value>A</value>
<value>B</value>
</set>
</property>
</bean>
<bean id="sequenceGenerator" parent="baseSequenceGenerator">
<property name="suffixes">
<set merge="true">
<value>A</value>
<value>C</value>
</set>
</property>
</bean>
</beans>
Main.java(同上,1. List)
控制台输出结果
100000-A-B-C
100001-A-B-C
SequenceGenerator.java(同上,4. Map)
beans.xml
<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="baseSequenceGenerator" class="com.apress.springrecipes.sequence.SequenceGenerator">
<property name="initial" value="100000"/>
<property name="suffixes">
<map>
<entry key="A" value="A"/>
<entry key="B" value="B"/>
</map>
</property>
</bean>
<bean id="sequenceGenerator" parent="baseSequenceGenerator">
<property name="suffixes">
<map>
<entry key="A" value="a"/>
<entry key="C" value="C"/>
</map>
</property>
</bean>
</beans>
Main.java(同上,1. List)
控制台输出结果
100000-A@a-C@C
100001-A@a-C@C