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