`
liuInsect
  • 浏览: 133285 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

spring 中prototype 和 reqeust的区别

阅读更多

 

 

我们知道,spring有singleton和prototype作用域,而且从spring2.0开始,又增加了三种作用域,request、session、global session。session、global session的作用域是HTTP session和全局session。对于request和prototype,每一次请求都会产生一个新的bean实例,那么它们的具体有什么区别呢?而且,Spring不能对一个prototype bean的整个生命周期负责,这一点我不太能理解,这样它占用的资源就很高昂了,那么prototype的好处是什么?要结束它的生命周围,要怎么做?而且,感觉request和prototype,除了prototype的生命周期不会被回调以外,它们的作用是不是一样?有什么具体的区别呢?

采纳的答案

2008-08-22 wangxin0072000 (高级程序员)

request依赖于web应用,request就类似与你的servlet,多个用户访问一个servlet,当然是访问servlet的多个实例,prototype实际上是new出来的,你想想,你的bean里new了一个对象,为什么要让spring给你销毁。prototype没有什么好不好的,只不过它能做singleton所不能做得(创建多个实例),在web项目之外也可以做request所不能做得事。prototype的销毁你不必关心,调用它的bean销毁了,它也就销毁了。request是web里所特有的。看来是java web做多了

提问者对于答案的评价:
谢谢了

 

 

 

这是转自 http://www.iteye.com/problems/3104 的文章..这里面只说到了 "request是web里所特有的

而我正好做到类似的应用  自己测试了下.... 把scope改成 reqeust 在struts2接受请求时是会报错的...大概的意思是不能将action和scope(作用域)是request的bean 结合使用,  其实我们用request或者prototype 的目的很明确,就是为了保证action的线程安全,因为spring默认的 scope是 singleton 单例模式的,, 

 

然后我将scope改成prototype 后,action变成线程安全的了.就是每次访问都是新的实例,这点我测试过,能确定,

但这就让我产生一个疑问?  什么时候才可以用request??他和prototype 的区别是???????  请高人回答

 

 

 

 

 

 

 

 

0
0
分享到:
评论
1 楼 ouchuquan 2016-05-05  
Prototype creates a brand new instance everytime you call getBean on the ApplicationContext. Whereas for Request,
only one instance is created for an HttpRequest. So in a single HttpRequest, I can call getBean twice on Application
and there will ever be one bean instantiated, whereas that same bean scoped to Prototype in that same single
HttpRequest would get 2 different instances.

HttpRequest scope
Mark mark1 = context.getBean("mark");
Mark mark2 = context.getBean("mark");
mark1 == mark2; //This will return true

Prototype scope

Mark mark1 = context.getBean("mark");
Mark mark2 = context.getBean("mark");
mark1 == mark2; //This will return false

相关推荐

    USB3.0 中文资料,CY3014中文资料

    USB3.0 中文资料,CY3014中文资料,USB3.0 中文资料,CY3014中文资料,USB3.0 中文资料,CY3014中文资料,密码123456

    vCenter任务、事件清除

    "vCenter任务、事件清除"是指在vCenter Server中对积累的任务记录和事件通知进行清理的过程。这通常是为了优化系统性能,减少存储占用,以及保持管理界面的清晰整洁。 vCenter 6.x 版本引入了许多改进和增强,包括...

    自整理Java关于基础和框架的面试题

    ##### Hibernate中get和load的区别 - **get**:立即加载,如果找不到对象抛出异常。 - **load**:延迟加载,如果找不到对象返回`null`。 ##### Hibernate、Ibatis、Jdbc三者的区别 - **Hibernate**:全ORM框架,...

    于笑扬java综合知识点总结-必背.pdf

    request.getSession() reqeust.getSession(false)和 request.getSession(true) 在 Servlet 中,request.getSession() 方法用于获取当前会话对象。如果没有当前会话对象,request.getSession() 方法将创建一个新的...

    filter配置解决乱码问题

    web.xml配置filter和filtermapping,编写类 读取或写死filter的init-params中的字符编码传入 reqeust中 调用dofilter方法,乱码解决

    Java全栈工程师面试宝典.doc

    十、 request.getSession()、reqeust.getSession(false)和 request.getSession(true) request.getSession() 方法用于获取当前请求的 HttpSession 对象: * request.getSession():如果当前请求中没有 HttpSession ...

    django-request:django-request是django的统计模块。 它将请求存储在数据库中供管理员查看,也可以用于获取有关谁在线等的统计信息

    它将请求存储在数据库中供管理员查看,也可以用于获取有关谁在线等的统计信息。 除了站点统计信息模块之外,通过使用active_users模板标记和管理器方法,您还可以使用django-request显示在特定时间内谁在线。 ...

    JAVA POST与GET数据传递时中文乱码问题解决方法

    在Java Web开发中,POST和GET是两种常见的HTTP请求方式,用于在客户端和服务器之间传递数据。然而,当处理包含中文字符的数据时,可能会遇到乱码问题。这个问题主要是由于字符编码不一致导致的。以下是一些解决Java ...

    要求:具有一些有用功能的提取包装

    描述中提到,这个库可以通过 `npm i -D @sitearcade/reqeust` 安装,并且有一个即将推出的用法文档。 在JavaScript的世界里,网络请求是应用程序与服务器交互的关键部分,尤其是对于前端开发者而言。`@sitearcade/...

    EasyRefresher:与滚动视图关联的刷新控件

    要安装它,只需将以下行添加到您的Podfile中: pod 'EasyRefresher' 预习 用法 添加刷新器 tableView. refresh . header . addRefreshClosure { self . reqeust { self . tableView . refresh . header . ...

    .NET 项目实战

    根据所提供的文件内容,我们可以梳理出关于.NET项目实战的知识点...通过本文件所涉及的多个项目案例的学习和实践,开发者可以加深对.NET平台下项目开发流程的理解,并在实际工作中更高效地解决技术难题,优化产品设计。

    JavaWeb开发PPT课件.ppt

    * 容器销毁reqeust和response对象以及相应的线程。 5. Servlet的加载方式 Servlet的加载有两种方式: * 第一次请求的时候加载。 * 服务器启动的时候加载。 6. 开发Servlet基本流程 开发一个Servlet程序基本包括...

    php Recess framework documents

    2. **关系定义:** 在模型类中定义与其他模型之间的关系,框架会自动处理相关的查询和操作。 通过以上知识点的介绍,我们可以看出Recess框架不仅功能强大,而且设计合理,非常适合用于开发各种规模的Web应用。无论...

    Django 如何获取前端发送的头文件详解(推荐)

    def index(reqeust): # 获取当前已经登录的用户 v = reqeust.COOKIES.get('username111') return render(reqeust,'index.html',{'current_user': v}) 这些方法是Django把一些常用的数据已经替我们封装好了,因此...

    java面试知识

    ##### Hibernate中get和load的区别 - **get**:立即加载对象,如果找不到对应记录,则抛出异常。 - **load**:延迟加载对象,如果找不到记录,则返回null。 ##### Hibernate、Ibatis、Jdbc三者的区别 - **...

    于笑扬java综合知识点总结-必背.doc

    #### 十、request.getSession()、reqeust.getSession(false)和request.getSession(true) - `getSession(false)`:如果不存在会话,则返回`null`。 - `getSession(true)`:如果不存在会话,则创建一个新的会话并返回...

    对DJango视图(views)和模版(templates)的使用详解

    视图接收reqeust对象作为第一个参数,包含了请求的信息 视图就是一个Python函数,被定义在views.py中 定义完成视图后,需要配置urlconf,否则无法处理请求 在Django中,定义URLconf包括正则表达式、视图两部分 ...

Global site tag (gtag.js) - Google Analytics