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:垃圾回收

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值