bean的作用域、初始化和销毁方法及生命周期
坚持每天写博文,积累下开发中的点点滴滴
- bean的作用域: bean对象可以存活多久的.
<bean id="" class="" scope="作用域"/>
singleton: 单例 ,在Spring IoC容器中仅存在一个Bean实例 (默认的scope)
prototype: 多例 ,每次从容器中调用Bean时,都返回一个新的实例,
request: 用于web开发,将Bean放入request范围 ,request.setAttribute(“xxx”) , 在同一个request 获得同一个Bean
session: 用于web开发,将Bean 放入Session范围,在同一个Session 获得同一个Bean
globalSession: 一般用于Porlet应用环境 , 分布式系统存在全局session概念(单点登录),如果不是porlet环境,globalSession 等同于Session
在开发中主要使用 scope=”singleton”、 scope=”prototype”.
对于MVC中的Action使用prototype类型,其他使用singleton
初始化和销毁方法:
比如DataSource,SessionFactory最终都需要关闭资源:在Bean销毁之前,都要调用close方法.
<bean id="someBean" class="......"
init-method="该类中初始化方法名" destroy-method="该类中销毁方法名">
</bean>
init-method:bean生命周期初始化方法,对象创建后就进行调用
destroy-method:容器被销毁的时候,如果bean被容器管理,会调用该方法。
如果bean的scope=”prototype”,那么容器只负责创建和初始化,它并不会被spring容器管理销毁。
- 不使用Spring测试:演示Spring容器非正常关闭:
单元测试的线程很短.(获取网络信息,不要使用单元测试,使用主方法)
如何正常的关闭Spring容器:
AbstractApplicationContext:
@Test
public void testLifeCycle2() throws Exception {
AbstractApplicationContext ctx = new ClassPathXmlApplicationContext(
"cn/itcast/cd/day1/lifecycle/LifeCycleTest-context.xml");
SomeBean bean = ctx.getBean("someBean", SomeBean.class);
System.out.println(bean);
//关闭上下文对象
//ctx.close();
//最好的方式:把Spring线程作为JVM的子线程:Spring没有运行完,JVM就不会终止.
ctx.registerShutdownHook();
}
GC:垃圾回收
下一篇: php curl 有个问题请指教
推荐阅读
-
Java Bean的作用域,生命周期和注解
-
bean的作用域、初始化和销毁方法及生命周期
-
Spring中Bean的生命周期自定义销毁和初始化方法实现详解
-
spring注册组件——@Bean的生命周期(指定初始化和销毁方法)示例
-
【Spring】【Bean的scope属性】【Bean的初始化和销毁方法】
-
spring初始化bean和销毁bean时调用的方法
-
spring Bean的初始化和销毁生命周期方法
-
Spring指定Bean的初始化方法和销毁方法
-
Spring Bean的初始化和销毁方法一:通过设置bean的initMethod和destroyMethod属性指定初始化和销毁方法。
-
Spring中Bean初始化和销毁方法执行的优先级