这里我只讨论Bean是怎样初始化的:
Ø  对于singleton Beanspring能够管理它的生命周期,知道其什么时候实例化,什么时候销毁。
Ø  对于non-singleton Beanspring没有管理它的生命周期,而是交给客户端自己管理,每次客户端发送一个请求就会创建一个实例。
Ø  如果Beannon-singleton,则不会在spring加载的时候实例化,而是在每次用到的时候实例化。
Ø  如果Beansingleton而且没有设置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>
 
可以分别使用配置文件中123看看是否创建了bean来验证以上的结论。附件为例子工程(Spring_BeanLifecycle),可直接导入eclipse