详解Spring中bean的scope以后使用.pdf

上传人:索**** 文档编号:77987497 上传时间:2023-03-16 格式:PDF 页数:4 大小:33.51KB
返回 下载 相关 举报
详解Spring中bean的scope以后使用.pdf_第1页
第1页 / 共4页
详解Spring中bean的scope以后使用.pdf_第2页
第2页 / 共4页
点击查看更多>>
资源描述

《详解Spring中bean的scope以后使用.pdf》由会员分享,可在线阅读,更多相关《详解Spring中bean的scope以后使用.pdf(4页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、详解 Spring 中 bean 的 scope以后使用如何使用 spring 的作用域:这里的 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 的类型的设计进行了重构,并设计出灵活

2、的 Bean类型支持,理论上可以有无数多种类型的Bean,用户可以根据自己的需要,增加新的Bean类 型,满足实际应用需求。1、singleton作用域当一个 bean的作用域设置为 singleton,那么 Spring IOC 容器中只会存在一个共享的 bean 实例,并且所有对bean 的请求,只要 id 与该 bean 定义相匹配,则只会返回 bean 的同一实例。换言之,当把一个 bean 定义设置为 singleton作用域时,Spring IOC容器只会创建该 bean 定义的唯一实例。这个单一实例会被存储到单例缓存(singleton cache)中,并且所有针对该bean 的

3、后续请求和引用都 将返回被缓存的对象实例,这里要注意的是singleton作用域和 GOF 设计模式中的单例是完全不同的,单例设计模式表示一个ClassLoader 中 只有一个 class 存在,而这里的 singleton则表示一个容器对应一个bean,也就是说当一个 bean 被标识为 singleton时 候,spring 的 IOC容器中只会存在一个该bean。配置实例:或者2、prototype prototype作用域部署的 bean,每一次请求(将其注入到另一个bean 中,或者以程序的方式调用容器的getBean()方法)都会产生一个新的bean实例,相当与一个 new的操作

4、,对于 prototype作用域的 bean,有一点非常重要,那就是Spring 不能对一个 prototype bean 的整个生命周期负责,容器在初始化、配置、装饰或者是装配完一个prototype实例后,将它交给客户端,随后就对该prototype实例不闻不问了。不管何种作用域,容器都会调用所有对象的初始化生命周期回调方法,而对 prototype而言,任何配置好的析构生命周期回调方法都将不会被调用。清除 prototype作用域的对象并释放任何prototype bean所持有的昂贵资源,都是客户端代码的职责。(让 Spring 容器释放被 singleton作用域 bean 占用资源

5、的一种可行方式是,通过使用 bean 的后置处理器,该处理器持有要被清除的bean 的引用。)配置实例:或者3、request request 表示该针对每一次HTTP 请求都会产生一个新的bean,同时该 bean 仅在当前 HTTP request 内有效,配置实例:request、session、global session 使用的时候首先要在初始化web的 web.xml中做如下配置:如果你使用的是 Servlet 2.4及以上的 web容器,那么你仅需要在web应用的XML声明文件 web.xml 中增加下述 ContextListener即可:.org.springframewor

6、k.web.context.request.RequestContextListener .,如果是 Servlet2.4以前的 web容器,那么你要使用一个javax.servlet.Filter的实现:.requestContextFilterorg.springframework.web.filter.RequestContextFilter requestContextFilter/*.接着既可以配置 bean 的作用域了:4、session session 作用域表示该针对每一次HTTP 请求都会产生一个新的bean,同时该bean仅在当前 HTTP session 内有效,配置实例

7、:配置实例:和 request 配置实例的前提一样,配置好web启动文件就可以如下配置:5、global session global session作用域类似于标准的HTTP Session 作用域,不过它仅仅在基于portlet的 web应用中才有意义。Portlet规范定义了全局 Session 的概念,它被所有构成某个 portlet web应用的各种不同的portlet所共享。在 global session 作用域中定义的bean被限定于全局 portlet Session的生命周期范围内。如果你在 web中使用 global session 作用域来标识 bean,那么 web会

8、自动当成 session 类型来使用。配置实例:和 request 配置实例的前提一样,配置好web启动文件就可以如下配置:6、自定义 bean 装配作用域在 spring2.0中作用域是可以任意扩展的,你可以自定义作用域,甚至你也可以重新定义已有的作用域(但是你不能覆盖singleton和 prototype),spring的作用域由接口 org.springframework.beans.factory.config.Scope来定 义,自定义自己的作用域只要实现该接口即可,下面给个实例:我们建立一个线程的scope,该 scope 在表示一个线程中有效,代码如下:publicclass

9、MyScope implements Scope privatefinal ThreadLocal threadScope=new ThreadLocal()protected Object initialValue()returnnew HashMap();public Object get(String name,ObjectFactory objectFactory)Map scope=(Map)threadScope.get();Object object=scope.get(name);if(object=null)object=objectFactory.getObject();s

10、cope.put(name,object);return object;public Object remove(String name)Map scope=(Map)threadScope.get();return scope.remove(name);publicvoid registerDestructionCallback(String name,Runnable callback)public String getConversationId()/TODO Auto-generated method stub returnnull;Request prototype 区别request 依赖于 web 应用,request 就类似与你的servlet,多个用户访问一个servlet,当然是访问 servlet 的多个实例,prototype 实际上是new 出来的,你想想,你的 bean 里 new 了一个对象,为什么要让spring 给你销毁。prototype 没有什么好不好的,只不过它能做singleton所不能做得(创建多个实例),在 web 项目之外也可以做request 所不能做得事。prototype的销毁你不必关心,调用它的bean销毁了,它也就销毁了。request是 web 里所特有的。看来是 java web 做多了

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 应用文书 > 工作报告

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁