天天看點

Spring中Bean的生命周期

這裡我隻讨論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,如需轉載請自行聯系原作者

繼續閱讀