0.思维导图



1. scope概论

spring中scope是一个很关键的概念。简单说就是对象在spring容器(IOC容器)中的生命周期,也能够理解为对象在spring容器中的创建方式。

2. scope历史及分类

眼下。scope的取值有5种取值:

在Spring 2.0之前。有singleton和prototype两种;

在Spring 2.0之后,为支持web应用的ApplicationContext,增强另外三种:request。session和global session类型。它们仅仅有用于web程序,一般是和XmlWebApplicationContext共同使用。

3.单个scope具体解释

1)singleton (单一实例)

此取值时表明容器中创建时仅仅存在一个实例,全部引用此bean都是单一实例。

如同每一个国家都有一个总统。国家的全部人共用此总统,而这个国家就是一个spring容器,总统就是spring创建的类的bean,国家中的人就是其他调用者。总统是一个表明其在spring中的scope为singleton。也就是单例模型。

此外。singleton类型的bean定义从容器启动到第一次被请求而实例化開始。仅仅要容器不销毁或退出。该类型的bean的单一实例就会一直存活,典型单例模式。如同servlet在web容器中的生命周期。

2)prototype

spring容器在进行输出prototype的bean对象时,会每次都又一次生成一个新的对象给请求方,尽管这样的类型的对象的实例化以及属性设置等工作都是由容器负责的。可是仅仅要准备完成。而且对象实例返回给请求方之后,容器就不在拥有当前对象的引用,请求方须要自己负责当前对象后继生命周期的管理工作,包含该对象的销毁。也就是说,容器每次返回请求方该对象的一个新的实例之后,就由这个对象“自生自灭”。最典型的体现就是spring与struts2进行整合时,要把action的scope改为prototype。

如同分苹果,将苹果的bean的scope属性声明为prototype,在每一个人领取苹果的时候。我们都是发一个新的苹果给他,发完之后,别人爱怎么吃就怎么吃,爱什么时候吃什么时候吃,可是注意吃完要把苹果核扔到垃圾箱!对于那些不能共享使用的对象类型,应该将其定义的scope设为prototype。

3)request

再次说明request,session和global session类型仅仅有用于web程序。一般是和XmlWebApplicationContext共同使用。

<bean id ="requestPrecessor" class="...RequestPrecessor"   scope="request" />

Spring容器,即XmlWebApplicationContext 会为每一个HTTP请求创建一个全新的RequestPrecessor对象,当请求结束后,该对象的生命周期即告结束,如同java web中request的生命周期。当同一时候有100个HTTP请求进来的时候。容器会分别针对这10个请求创建10个全新的RequestPrecessor实例,且他们相互之间互不干扰。简单来讲,request能够看做prototype的一种特例,除了场景更加详细之外,语意上差点儿相同。

4)session

对于web应用来说,放到session中最普遍的就是用户的登录信息,对于这样的放到session中的信息。我们能够使用例如以下形式的制定scope为session:

<bean id ="userPreferences" class="...UserPreferences"   scope="session" />

Spring容器会为每一个独立的session创建属于自己的全新的UserPreferences实例,比request scope的bean会存活更长的时间,其它的方面没差别,假设java web中session的生命周期

5)global session

<bean id ="userPreferences" class="...UserPreferences"   scope="globalsession" />

global session仅仅有应用在基于porlet的web应用程序中才有意义。它映射到porlet的global范围的session,假设普通的servlet的web 应用中使用了这个scope。容器会把它作为普通的session的scope对待。

4.scope配置

1)xml方式

进行bean的配置时,指定scope。

2)注解方式

前提为配置spring为注解配置。

版权声明:本文博客原创文章,博客,未经同意,不得转载。

本文转自mfrbuaa博客园博客,原文链接:http://www.cnblogs.com/mfrbuaa/p/4680053.html,如需转载请自行联系原作者

spring中间scope详细解释相关推荐

  1. Spring中IOC和AOP的详细解释(转)

    原文链接:Spring中IOC和AOP的详细解释 我们是在使用Spring框架的过程中,其实就是为了使用IOC,依赖注入,和AOP,面向切面编程,这两个是Spring的灵魂. 主要用到的设计模式有工厂 ...

  2. Spring IOC源代码具体解释之容器初始化

    Spring IOC源代码具体解释之容器初始化 上篇介绍了Spring IOC的大致体系类图,先来看一段简短的代码,使用IOC比較典型的代码 ClassPathResource res = new C ...

  3. Python精讲Numpy基础,大牛笔记详细解释

    https://www.toutiao.com/a6664936105076326920/ 总认为Numpy是渣渣,直到深入接触以后才知道功能这么强大.堪比Matlab啊.果然是人生苦短,我用Pyth ...

  4. UIApplication sharedApplication详细解释-IOS

    UIApplication sharedApplication详细解释-IOS 分类: iOS开发2012-07-27 10:25 10287人阅读 评论(2) 收藏 举报 applicationui ...

  5. MongoDB:详细解释mongodb的高级操作,聚合和游标

    前几天总结了mongodb的安装入门.详细解释了增删改查的基本操作,今天再来总结下mongodb更高级的操作,聚合和游标. 一.聚合,mongodb的聚合操作一般分为四种情景,分别是:count.di ...

  6. PySide2 基础入门-创建实例窗口(详细解释)

    PySide2 基础入门-创建实例窗口(详细解释) python 3.7 / Pyside2 (如果使用pyQt5,将Pyside2 直接替换PyQt5即可)首先我们在Qt Designer中画好界面 ...

  7. Python之pandas:pandas.set_option函数的参数详细解释

    Python之pandas:pandas.set_option函数的参数详细解释 目录 pandas.set_option函数的参数解释 函数API:pandas.set_option pandas. ...

  8. linux中useradd的文件路径,linux的useradd命令详细解释

    Linux中的useradd命令顾名思义就是添加用户的命令.下面由学习啦小编为大家整理了Linux的useradd命令的详细解释的相关知识,希望对大家有帮助! linux的useradd命令的详细解释 ...

  9. 英语中的介词详细解释

    英语中的介词详细解释 xixi2015-01-05 10:02:58 转载于:https://www.cnblogs.com/lyhabctranslate/p/4202991.html

最新文章

  1. Python3中的类和实例
  2. 深度学习不可信?大脑建模先驱有话说
  3. wps怎么投递简历发到boss直聘_央视新闻联合BOSS直聘带“岗”年薪超82亿元
  4. c# 调用oracle function,C#调用Oracle存储过程的方法
  5. 23、90秒快速“读懂”STP(生成树)工作原理
  6. impala的substr从第几位截到最后一位_天赋不输乔丹,麦迪选秀为何只排第9?看前面几位,第1让老詹吃瘪...
  7. C语言ctype.h库
  8. 【GDB调试学习笔记】调试逻辑错误
  9. linux c 静态连接,Linux cmake 静态链接boost
  10. vscode风格个人主页源码
  11. source insight 3.5 配置文件GLOBAL.CF3--免费
  12. c语言求等差数列的和oj,华为oj之等差数列前n项和
  13. 【秋招面试】货拉拉面试(1面过程)
  14. 手把手教你用JSP完成登录注册插入数据库数据
  15. 网站权重是什么意思?
  16. 机器视觉:热成像相机选择的五大因素
  17. 中国书法列入非物质文化遗产
  18. 通过指定的URL获取返回图片的BASE64编码
  19. 论文精读《LSS: Lift, Splat, Shoot: Encoding Images from Arbitrary Camera Rigs by Implicitly Unprojecting》
  20. 高频功率放大器工作原理总结(高频和低频功率放大器的区别)

热门文章

  1. jQuery的.bind()、.live()和.delegate()之间区别
  2. ruid/euid/suid
  3. 通过修改注册表提升SSD性能(Intel 5系列芯片组)
  4. wifi无线破解(BT4)
  5. ES6 箭头函数易出错细节
  6. Spring+SpringMVC+MyBatis深入学习及搭建(十七)——SpringMVC拦截器
  7. 使用Junit4时问题
  8. 任何时候不要把普通PC机接入到三层交换机
  9. samll note
  10. 精通SERV-U配置文件