博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring作用域
阅读量:6200 次
发布时间:2019-06-21

本文共 2002 字,大约阅读时间需要 6 分钟。

  hot3.png

<bean id="role" class="spring.chapter2.maryGame.Role" scope="singleton"/>

这里的scope就是用来配置spring bean的作用域,它标识bean的作用域。在spring2.0之前bean只有2种作用域即:singleton(单例)、non-singleton(也称prototype),Spring2.0以后,增加了session、request、global session三种专用于Web应用程序上下文的Bean。因此,默认情况下Spring2.0现在有五种类型的Bean。当然,Spring2.0对Bean的类型的设计进行了重构,并设计出灵活的Bean类型支持,理论上可以有无数多种类型的Bean,用户可以根据自己的需要,增加新的Bean类型,满足实际应用需求。

 

1、  singleton作用域[默认]

当一个bean的作用域设置为singleton, 那么Spring IOC容器中只会存在一个共享的bean实例,并且所有对bean的请求,只要id与该bean定义相匹配,则只会返回bean的同一实例。换言之,当把一个bean定义设置为singleton作用域时,Spring IOC容器只会创建该bean定义的唯一实例。这个单一实例会被存储到单例缓存(singleton cache)中,并且所有针对该bean的后续请求和引用都将返回被缓存的对象实例,这里要注意的是singleton作用域和GOF设计模式中的单例是完全不同的,单例设计模式表示一个ClassLoader中只有一个class存在,而这里的singleton则表示一个容器对应一个bean,也就是说当一个bean被标识为singleton时候,spring的IOC容器中只会存在一个该bean。

配置实例:

<bean id="role" class="spring.chapter2.maryGame.Role" scope="singleton"/>

或者

<bean id="role" class="spring.chapter2.maryGame.Role" singleton="true"/>

 

2、  prototype

prototype作用域部署的bean,每一次请求(将其注入到另一个bean中,或者以程序的方式调用容器的getBean()方法)都会产生一个新的bean实例,相当与一个new的操作,对于prototype作用域的bean,有一点非常重要,那就是Spring不能对一个prototype bean的整个生命周期负责,容器在初始化、配置、装饰或者是装配完一个prototype实例后,将它交给客户端,随后就对该prototype实例不闻不问了。不管何种作用域,容器都会调用所有对象的初始化生命周期回调方法,而对prototype而言,任何配置好的析构生命周期回调方法都将不会被调用。清除prototype作用域的对象并释放任何prototype bean所持有的昂贵资源,都是客户端代码的职责。(让Spring容器释放被singleton作用域bean占用资源的一种可行方式是,通过使用bean的后置处理器,该处理器持有要被清除的bean的引用。)

 

配置实例:

<bean id="role" class="spring.chapter2.maryGame.Role" scope="prototype"/>

或者

<bean id="role" class="spring.chapter2.maryGame.Role" singleton="false"/>

<bean id="meetAction" class="com.web.actions.MeetsAction"

  scope="prototype">

  <property name="meetsService" ref="meetsService" />

</bean>

 

在 Spring2.0中除了以前的Singleton和Prototype外又加入了三个新的web作用域,分别为request、session和 global session。如果你希望容器里的某个bean拥有其中某种新的web作用域,除了在bean级上配置相应的scope属性,还必须在容器级做一个额外的初始化配置。即在web应用的web.xml中增加这么一个ContextListener: org.springframework.web.context.request.RequestContextListener 以上是针对Servlet 2.4以后的版本。比如Request作用域。

转载于:https://my.oschina.net/dslztx/blog/125323

你可能感兴趣的文章
单元测试规范
查看>>
使用WinHex
查看>>
简单的使用CocoaPods集成ShareSDK
查看>>
golang源码包阅读 bytes
查看>>
Android studio再改程序代码压缩器轻松提升程序代码压缩速度
查看>>
go语言学习笔记(9)通道进阶
查看>>
通俗易懂理解ES6 - ES6的变量类型及Iterator
查看>>
解决iOS表单列表键盘遮挡的问题
查看>>
容器Docker学习系列五~命令学习history,save, import
查看>>
我对JavaScript中this的一些理解
查看>>
01 iOS中Block的基础用法
查看>>
谈谈 MyBatis 的插件化设计
查看>>
页面可视化搭建工具前生今世
查看>>
UX设计秘诀之注册表单设计,细节决定成败
查看>>
前端通过post访问后端,后端断点断不住(没有收到request请求)
查看>>
ajax的请求方式(get和post的区别)?
查看>>
深度解读Helm 3: 犹抱琵琶半遮面
查看>>
Gson字符串数组转成List对象(泛型、Kotlin)
查看>>
dataX的入门到入土
查看>>
T-Tree、T*-Tree的理解与简单内存数据库的实现
查看>>