<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>3.2.16.RELEASE</version>
</dependency>
首先,寫一個雜技師類;

在spring配置文件中聲明該雜技師Bean(未配置<constructor-arg>,將使用默認構造方法);
<bean id="duke" class="cn.edu.hdu.sia.chapter2.Juggler"> </bean>
在main方法中使用該雜技師bean;
public static void main(String[] args) {
ApplicationContext ctx = new ClassPathXmlApplicationContext("spring.xml");
Performer performer = (Performer) ctx.getBean("duke");
performer.perform();
}
構造方法參數為基本數據類型的情況
接著上例的例子,可以在配置bean的時候,往構造方法傳入參數,如下配置,將調用public Juggler(int beanBags)構造方法創建雜技師bean;
<bean id="duke" class="cn.edu.hdu.sia.chapter2.Juggler">
<constructor-arg value="15" />
</bean>
構造方法參數為對象引用類型的情況
現在,我們將要給雜技師增加吟詩行為;
先定義一個詩歌背誦接口:
package cn.edu.hdu.sia.chapter2;
public interface Poem {
public void recite();
}
再寫一個吟詩實現類:
package cn.edu.hdu.sia.chapter2;
public class JingYeSi implements Poem{
public void recite() {
System.out.println("床前明月光~");
}
}
然後編寫吟詩雜耍類:

在spring配置文件中聲明該雜技師Bean,注意構造方法的第二個參數為對象引用,引用id為“jingyesi”的bean;
可以用index屬性指定構造方法參數索引下標,type指定構造方法參數類型,name指定構造方法參數名,用於區分不同的參數;
<bean id="jingyesi" class="cn.edu.hdu.sia.chapter2.JingYeSi">
</bean>
<bean id="poeticDuke" class="cn.edu.hdu.sia.chapter2.PoeticJuggler">
<constructor-arg value="15" />
<constructor-arg ref="jingyesi" />
</bean>
最後參考前面寫的main方法測試perform的執行情況,發現該雜技師Bean不僅能雜耍,還能吟詩;
當構造方法為私有的時候,是不能夠通過構造方法創建bean的,這時候一般通過工廠方法創建,如下為一個典型的單例類,其構造方法為私有屬性:
package cn.edu.hdu.sia.chapter2;
public class Stage {
private Stage() {
}
private static class StageSingletonHolder {
static Stage stage = new Stage();
}
public static Stage getInstance() {
return StageSingletonHolder.stage;
}
public void printDescription(){
System.out.println("this is a stage.");
}
}
要創建該bean,需要在spring配置文件中做如下配置:
可以用factory-bean屬性設置指定的工廠bean,用<constructor-arg>標簽往factory-method傳入參數;
<bean id="theStage" class="cn.edu.hdu.sia.chapter2.Stage" factory-method="getInstance" />
所有的bean在spring上下文范圍內默認都是“單例”的,即只有一個實例,注意,這裡的單例指的是spring上下文范圍內的單例;要修改該配置項,只需要配置scope屬性,scope默認是singleton,可配置的屬性值如下列表: