一Bean对象创建时机默认是随容器创建通过lazyinit可以改变对象实例化时机 (a)默认lazyinit=default||false:
当spring容器实例化的时候并把
容器中对象全部完成实例化
<bean id=bean class=comtarenaentityBean lazyinit=false/>
(b)lazyinit=true
当从spring容器中获取对象时候在对对象
实例始化
(c)设置全局defaultlazyinit=true
整个配置文件中对象都实例化延迟
<beans …
defaultlazyinit=true>
</beans>
注意在使用定时器的时候不能使用lazyinit=true
二Bean对象的创建模式 singleton:spring容器对象默认是单例模式每次只成一个实例
<bean id= class= scope=singleton/> struts:
prototype:多例spring容器会每次都为对象产生一个新实例
<bean id= class= scope=prototype/> struts:
scope:在web开发中使用requestsession
回顾
会话与服务器端多次请求和响应过程
pageContext:当前页面
session:一次会话
request:一次请求
application:整个应用服务器
测试类
[java]
public class Bean {
public void show(){
Systemoutprintln(我是一个豆子)
}
public Bean() {
Systemoutprintln(我出生了)
}
public static void main(String[] args) {
ApplicationContext ac = new
FileSystemXmlApplicationContext(classpath:applicationContextxml)
Bean bean = (Bean)acgetBean(bean)
Bean bean = (Bean)acgetBean(bean)
if(bean == bean){
Systemoutprintln(单例)
}else{
Systemoutprintln(多例)
}
}
}
当配置文件中<bean id=bean class=comtarenaentityBean/>
运行结果 我出生了
单例
当配置文件中<bean id=bean class=comtarenaentityBean scope=prototype/>
运行结果
我出生了
我出生了
多例
三Bean对象初始化和销毁 (a)在spring配置文件定义销毁方法和初始化方法
<bean initmethod=init destroymethod=destroy>
(b)在Bean 对象中定义销毁方法和初始化方法
public void init(){}
public void destroy(){}
(c)spring容器自动调用销毁方法和初始化方法
注意销毁方法在spring容器销毁才去调用
AbstractApplicationContext提供销毁容器方法
close()//销毁容器
Bean对象时多例不支持destroy(){}销毁
scope=prototype
测试类
[java]
public class Bean {
public void show(){
Systemoutprintln(我是一个豆子)
}
public Bean() {
Systemoutprintln(我出生了)
}
//定义初始化方法
public void init(){
Systemoutprintln(执行init方法)
}
public void destroy(){
Systemoutprintln(执行destroy)
}
public static void main(String[] args) {
AbstractApplicationContext ac = new
FileSystemXmlApplicationContext(classpath:applicationContextxml)
Bean bean = (Bean)acgetBean(bean)
beanshow()
acclose()
}
}
当配置文件中<bean id=bean class=comtarenaentityBean initmethod=init destroymethod=destroy />
运行结果 我出生了
执行init方法
我是一个豆子
执行destroy
当配置文件中<bean id=bean class=comtarenaentityBean initmethod=init destroymethod=destroy scope=prototype/>
运行结果
我出生了
执行init方法
我是一个豆子