• Spring07----Bean的作用域


    什么是作用域呢?即“scope”,在面向对象程序设计中一般指对象或变量之间的可见范围。而在Spring容器 中是指其创建的Bean对象相对于其他Bean对象的请求可见范围。
    Spring提供“singleton”和“prototype”两种基本作用域,另外提供“request”、“session”、“global session”三种web作用域;Spring还允许用户定制自己的作用域。下面只介绍基本的作用域

    一. singleton

    标记为拥有singleton scope的对象定义,在Spring的IoC容器中只存在一个实例,所有对该对象的引 用将共享这个实例。该实例从容器启动,并因为第一次被请求而初始化之后,将一直存活到容器退出, 也就是说,它与IoC容器“几乎”拥有相同的“寿命”。 

     

    需要注意的一点是,不要因为名字的原因而与GoF①所提出的Singleton模式相混淆,二者的语意是 不同的: 标记为singleton的bean是由容器来保证这种类型的bean在同一个容器中只存在一个共享实例;
    而Singleton模式则是保证在同一个Classloader中只存在一个这种类型的实例。

    可以从两个方面来看待singleton的bean所具有的特性:

    1)对象实例数量。singleton类型的bean定义,在一个容器中只存在一个共享实例,所有对该类型 

    bean的依赖都引用这一单一实例。这就好像每个幼儿园都会有一个滑梯一样,这个幼儿园的小 朋友共同使用这一个滑梯。而对于该幼儿园容器来说,滑梯实际上就是一个singleton的bean。 

    2)对象存活时间。singleton类型bean定义,从容器启动,到它第一次被请求而实例化开始,只要 容器不销毁或者退出,该类型bean的单一实例就会一直存活

    通常情况下,如果你不指定bean的scope,singleton便是容器默认的scope

    二. prototype

    针对声明为拥有prototype scope的bean定义,容器在接到该类型对象的请求的时候,会每次都重新 生成一个新的对象实例给请求方。虽然这种类型的对象的实例化以及属性设置等工作都是由容器负责 的,但是只要准备完毕,并且对象实例返回给请求方之后,容器就不再拥有当前返回对象的引用,请 求方需要自己负责当前返回对象的后继生命周期的管理工作,包括该对象的销毁。也就是说,容器每 次返回给请求方一个新的对象实例之后,就任由这个对象实例“自生自灭”了。 

  • 相关阅读:
    css3实现渐变进度条
    从实际项目出发,浅淡什么是设计空间
    消失的Controller
    深入理解Go系列一之指针变量
    48个国际音标简述
    【PyTorch】按照 steps 训练和保存模型
    用C/python手写redis客户端,兼容redis集群 (-MOVED和-ASK),快速搭建redis集群
    jsoncpp安装与使用 cmake安装 升级g++ gcc支持c++11
    【Android】解决Android Studio初次配置可能会出现的Unkown Host问题
    【数据结构】时间复杂度和空间复杂度计算
  • 原文地址:https://www.cnblogs.com/Hermioner/p/10193154.html
Copyright © 2020-2023  润新知