这里我只讨论
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( "---------创建");
}
}
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");
}
}
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 >
<!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
。
本文转自 yzzh9 51CTO博客,原文链接:http://blog.51cto.com/java999/184572,如需转载请自行联系原作者