Spring IOC之 Bean的作用域与生命周期

Bean的作用域

bean的scope属性
		singleton:单例作用域
		propotype:原型作用域

默认情况下,我们从Spring容器中拿到的对象均是单例的,对于bean作用域类型如下:

1. singleton作用域(单例作用域)

在这里插入图片描述
注:lazy-init是懒加载,如果lazy-init=true是指Spring容器启动时不会实例化这个bean而是等到程序需要调用时才会去实例化。默认是false,即容器在启动的情况下就实例化所有singleton的bean对象,并存放在缓存池中。

  • 思考:lazy-init属性为什么要设置为false?

    i.可以提前发现潜在的配置文件问题
    ii.Bean对象在启动时就会设置在单例缓存池中,使用时不需要再去实例化对象,提高程序运行效率

  • 什么对象适合作为单例对象?(什么对象适合交给IOC容器实例化?)

     无状态的对象(不存在改变当前对象状态的成员变量)
     适用对象:Controller层、Service层、Dao层
    
  • 什么是无状态对象

实际上对象状态的变化往往均是由于属性变化而引起的,比如user类 姓名属性会变化,姓名属性的变化一般会引起User对象状态的变化。对于我们的程序来说,无状态对象没有实例变量的存在,保证了线程的安全性,service层业务对象即是无状态对象。线程是安全的

2.prototype作用域(原型作用域)

prototype作用域:SpringIOC 容器在启动时,不会将bean对象实例化设置到缓存池中,每次实例化对象都会创建一个新的实例。
在这里插入图片描述

3. Web应用中的作用域

  • request作用域

    表示每个请求需要容器创建一个全新Bean。比如提交表单的数据必须是对每次请求新建一个Bean来保持这些表单数据,请求结束释放这些数据

  • session作用域

    表示每个会话需要容器创建一个全新Bean。比如对于每个用户一般会有一个会话,该用户的用户信息需要存储到会话中,此时可以将该Bean作用域配置为session级别。

  • globalSession作用域

    类似于session作用域,其用于portlet(Portlet是基于lava的Web组件,由Portlet容器管理,并由容器处理请求,生产动态内容)环境的web应用。如果在非非portlet环境将视为session作用域。
    注:Web应用中的作用域了解即可

二、Bean生命周期
在Spring中,Bean的生命周期包括bean的定义、初始化和使用和销毁4个阶段

1.bean的定义

在配置文件中定义bean
通过bean标签定义对应的bean对象

2.bean的初始化

IOC容器启动时,自动实例化bean对象
	1..在配置文件中通过指定 init-method 属性来完成。
	2..实现org.springframework.bean.factory.InitializingBean 接口

3.bean的使用

方式一:使用BeanFactory
方式二:ApplicationContext
  1. bean的销毁
步骤一:通过AbstractApplicationContext对象,调用其close方法实现bean的销毁过程
步骤二:在配置文件中指定对应的销毁效用的方法 destroy-method
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值