這裡我隻讨論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("---------建立");
}
}
Test.java:
public class Test extends TestCase {
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>
可以分别使用配置檔案中1,2,3看看是否建立了bean來驗證以上的結論。附件為例子工程(Spring_BeanLifecycle),可直接導入eclipse。
<a href="http://down.51cto.com/data/2353505" target="_blank">附件:http://down.51cto.com/data/2353505</a>
本文轉自 yzzh9 51CTO部落格,原文連結:http://blog.51cto.com/java999/184572,如需轉載請自行聯系原作者