这里我只讨论 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