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为注解配置。

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvamFja2xlYXJudGVjaA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

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

spring中间scope详细解释的更多相关文章

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

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

  2. Spring学习13-中IOC(工厂模式)和AOP(代理模式)的详细解释

    我们是在使用Spring框架的过程中,其实就是为了使用IOC,依赖注入,和AOP,面向切面编程,这两个是Spring的灵魂. 主要用到的设计模式有工厂模式和代理模式. IOC是工厂模式参考:设计模式- ...

  3. SpringBoot-02:SpringBoot中的POM文件详细解释

    ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 我把pom文件,以及它的详细解释发出来 <?xml version="1.0" en ...

  4. Spring IOC源代码具体解释之容器依赖注入

    Spring IOC源代码具体解释之容器依赖注入 上一篇博客中介绍了IOC容器的初始化.通过源代码分析大致了解了IOC容器初始化的一些知识.先简单回想下上篇的内容 加载bean定义文件的过程.这个过程 ...

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

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

  6. .htaccess语法之RewriteCond与RewriteRule指令格式详细解释

    htaccess语法之RewriteCond与RewriteRule指令格式详细解释 (2012-11-09 18:09:08) 转载▼ 标签:  htaccess it 分类: 网络 上文htacc ...

  7. cookie的详细解释

    突然看到网页上中英文切换的效果,不明白怎么弄得查了查 查到了cookie 并且附有详细解释 就copy留作 以后温习 http://blog.csdn.net/xidor/article/detail ...

  8. tar命令的详细解释

    tar命令的详细解释 标签: linuxfileoutputbashinputshell 2010-05-04 12:11 235881人阅读 评论(12) 收藏 举报  分类: linux/unix ...

  9. Spring的scope="prototype"属性

    spring 默认scope 是单例模式这样只会创建一个Action对象每次访问都是同一个Action对象,数据不安全struts2 是要求 每次次访问 都对应不同的Actionscope=" ...

随机推荐

  1. poj1655 Balancing Act 找树的重心

    http://poj.org/problem? id=1655 Balancing Act Time Limit: 1000MS   Memory Limit: 65536K Total Submis ...

  2. 利用Sambaserver在Ubuntu系统和Win7系统间共享目录

    1 介绍 如今是网络化的时代,我们每一个人要更好的发展.离不开网络化.信息化的支持.利用网络的支持.在不同的操作系统间共享文件等信息,是计算机专业学生必备的一项技能. 本文所讲的就是怎样建立.设置.链 ...

  3. 数学思想方法-分布式计算-linux/unix技术基础(5)

    shell命令行参数 -bash-4.2$ cat test1.sh#!/bin/shecho "$0  "echo "$1  "echo "$2   ...

  4. HQApi命令行接口配置

    执行的命令行前准备 在您的个人文件夹中第一次创建 型材client.properties 如下面 cd C:\Users\scnyli\ mkdir ".hq" 创建一个 clie ...

  5. java.lang.RuntimeException: Method called after release()

    主要引起是因為在 camera.stopPreview();   camera.release(); 前沒有將setPreviewCallback 設置為null, 解決情況: public void ...

  6. 建立Hibernate二级Cache

    建立Hibernate二级Cache它需要两个步骤:首先,一定要使用什么样的数据并发策略,然后配置缓存过期时间,并设置Cache提供器. 有4种内置的Hibernate数据并发冲突策略,代表数据库隔离 ...

  7. J2SE基础:7.系统经常使用类一

    1.Object对象 Object对象是全部对象的根类. 每一个对象都默认继承自Object类. equals():对象与对象之间是否相等. 逻辑上面的相等.equals 物理上面的相等(地址相等) ...

  8. WPF下的视频录制界面设计

    原文:WPF下的视频录制界面设计 在去年12月份,我曾经写过三篇文章讨论C#下视频录制.播放界面的设计.这三篇文章是:利用C#画视频录制及播放的界面(一) 利用C#画视频录制及播放的界面(二)利用C# ...

  9. Nginx禁止特定用户代理(User Agents)访问(转)

    Nginx可以通过各种方式来限制访问,例如NGINX基本Http认证.allow/deny等等,这些都是前文提过的,今天来看看nginx如果通过用户代理来禁止访问. user agent是什么? 用户 ...

  10. JTable demo

    简单讲就是在没有使用layout manager的时候用setSize,在使用了layout manager 的时候用setPreferredSize 并且setPreferredSize通常和set ...