前面介绍的都是关于普通的单个Bean的注入,现在讲解关于容器类的输入,包括实现Collection接口的容器,和
Properties还有Map的这类容器的注入。
1.Wiring collections
package com.bird.springidol; import java.util.Collection; public class OneManBand { private Collection<Instrument> instruments; public OneManBand() { } public void perform() { for(Instrument instrument: instruments){ instrument.play(); } } public Collection<Instrument> getInstruments() { return instruments; } public void setInstruments(Collection<Instrument> instruments) { this.instruments = instruments; } }
配置代码
<bean id="hank" class="com.bird.springidol.OneManBand"> <property name="instruments"> <list> <ref bean="saxophone"/> <ref bean="guitar"/> </list> </property> </bean>
2.Wiring Map Collections
package com.bird.springidol; import java.util.Map; public class CopyOfOneManBand2 { private Map<String, Instrument> instruments; public CopyOfOneManBand2() { } public void perform() { for (String key : instruments.keySet()) { System.out.println(key + " : "); Instrument instrument = instruments.get(key); instrument.play(); } } public Map<String, Instrument> getInstruments() { return instruments; } public void setInstruments(Map<String, Instrument> instruments) { this.instruments = instruments; } }
<bean id="hank1" class="com.bird.springidol.CopyOfOneManBand2"> <property name="instruments"> <map> <entry key="guitar" value-ref="guitar"></entry> <entry key="saxophone" value-ref="saxophone"></entry> </map> </property> </bean>
3.Wiring nothing
在Spring里面,可以给一个属性显示的注入空值
<property name="someNonNullProperty"><null/></property>
4.Wiring with expressions
Spring提供了一个强大的动态表示语言,Spring Expression Language。
<bean id="car1" class="com.bird.springidol.Instrumentalist"> <property name="song" value="#{kenny.song}"></property> <property name="instrument" value="#{kenny.instrument}"></property> </bean>
还可以使用各种静态方法和获得方法的返回值等等
<property name="song" value="#{songSelector.selectSong()}"/>获得一个类的方法的返回值
使用静态方法
<property name="multiplier" value="#{T(java.lang.Math).PI}"/>
也可以使用逻辑运算符
<property name="adjust" value="#{T(java.lang.Math).PI * 2}"/>