這裏我只討論Bean是怎樣初始化的:
Ø 對於singleton Bean,spring能夠管理它的生命週期,知道其什麼時候實例化,什麼時候銷燬。
Ø 對於non-singleton Bean,spring沒有管理它的生命週期,而是交給客戶端自己管理,每次客戶端發送一個請求就會創建一個實例。
Ø 如果Bean是non-singleton,則不會在spring加載的時候實例化,而是在每次用到的時候實例化。
Ø 如果Bean是singleton而且沒有設置lazy-init="true",就在spring加載的時候實例化。如果設置了lazy就在第一次調用的時候實例化 。
Fengshan.java:
public class Fengshan {
public Fengshan(){
System.out.println("---------創建");
}
}
public Fengshan(){
System.out.println("---------創建");
}
}
Test.java:
public class Test extends TestCase {
public void testBean(){
//加載spring配置文件
ApplicationContext ctx = new ClassPathXmlApplicationContext("bean.xml");
//調用bean
//Fengshan fengshan = (Fengshan) ctx.getBean("fengshan");
}
}
public void testBean(){
//加載spring配置文件
ApplicationContext ctx = new ClassPathXmlApplicationContext("bean.xml");
//調用bean
//Fengshan fengshan = (Fengshan) ctx.getBean("fengshan");
}
}
bean.xml:spring配置文件
<?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>
<!—1.單例非lazy,此bean在spring配置文件加載時實例化-->
<bean id="fengshan" class="com.dvnchina.test.Fengshan" scope="singleton" />
<!—2.單例lazy,所以此bean在spring配置文件加載時不實例化,只在第一次使用此bean時實例化-->
<!--
<bean id="fengshan" class="com.dvnchina.test.Fengshan" scope="singleton" lazy-init="true" />
-->
<!—3.非單例,此bean在spring配置文件加載時不實例化,每次請求此bean時都實例化-->
<!--
<bean id="fengshan" class="com.dvnchina.test.Fengshan" scope="prototype" />
-->
</beans>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd">
<beans>
<!—1.單例非lazy,此bean在spring配置文件加載時實例化-->
<bean id="fengshan" class="com.dvnchina.test.Fengshan" scope="singleton" />
<!—2.單例lazy,所以此bean在spring配置文件加載時不實例化,只在第一次使用此bean時實例化-->
<!--
<bean id="fengshan" class="com.dvnchina.test.Fengshan" scope="singleton" lazy-init="true" />
-->
<!—3.非單例,此bean在spring配置文件加載時不實例化,每次請求此bean時都實例化-->
<!--
<bean id="fengshan" class="com.dvnchina.test.Fengshan" scope="prototype" />
-->
</beans>
可以分別使用配置文件中1,2,3看看是否創建了bean來驗證以上的結論。附件爲例子工程(Spring_BeanLifecycle),可直接導入eclipse。