页面每次添加都显示最后一次访问记录spring scope=prototype 学习笔记
<bean id="meetAction" class="com.web.actions.MeetsAction"
scope="prototype">
<property name="meetsService" ref="meetsService" />
</bean>
<!--
scope="prototype"没写的问题,项目中对一个表的增删该操作是用一个action,这个action有add,update,delete,save这些方法,
添加和修改是共用一个页面,当页面得到id时代表进行的修改操作,反之是添加操作。因为在配置spring的bean是忘了写scope="prototype"
所以每次添加时都显示最后一次访问过的记录,scope="prototype" 会在该类型的对象被请求
时创建一个新的action对象。如果没有配置scope=prototype则添加的时候不会新建一个action,他任然会保留上次访问的过记录的信息
webwork的Action不是线程安全的,要求在多线程环境下必须是一个线程对应一个独立的实例,不能使用singleton。
所以,我们在Spring配置Webwork Action Bean时,需要加上属性scope=”prototype”或singleton=”false”。
singleton模式指的是对某个对象的完全共享,包括代码空间和数据空间,说白了,如果一个类是singleton的,
假如这个类有成员变量,那么这个成员变量的值是各个线程共享的(有点类似于static的样子了),当线程A往给变量赋了一个值以后,
线程B就能读出这个值。因此,对于前台Action,肯定不能使用singleton的模式,必须是一个线程请求对应一个独立的实例。推而广之,
只要是带数据成员变量的类,为了防止多个线程混用数据,就不能使用singleton。对于我们用到的Service、Dao,之所以用了singleton,
就是因为他们没有用到数据成员变量,如果谁的Service需要数据成员变量,请设置singleton=false。
默认情况下,从bean工厂所取得的实例为Singleton(bean的singleton属性) Singleton: Spring容器只存在一个共享的bean实例,
默认的配置。 Prototype: 每次对bean的请求都会创建一个新的bean实例。二者选择的原则:有状态的bean都使用Prototype作用域
,而对无状态的bean则应该使用singleton作用域。
在 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作用域!
引用:http://wdlisoft.javaeye.com/blog/479049
singleton是单态模式的 ,有ioc容器管理 ,当然不是线程安全的啦 ,不过所谓的线程安全也是相对的
如果你的类是没有状态的, 那用singleton 的性能要高一些 ,因为只有一个实例 。
如果你的类是有状态的 ,那就必须显示的设置为prototype了
在ssh2 项目中 , struts2的action交由spring管理的时候 ,spring默认是singleton的 ,而struts2的action显然是有状态的 ,所以必须显示设置为
scope=“prototype”
prototype为原型模式 , 每次action请求过来都会创建一个action
但是对那些Dao的实现类推介scope=“singleton” ,因为这些类没有状态,用singleton只需维护一个实例,显然性能高一些
转载于:https://blog.51cto.com/alinazh/1274368
页面每次添加都显示最后一次访问记录spring scope=prototype 学习笔记相关推荐
- 1分钟解决VS每次运行都显示“正在还原nuget程序包”问题
1分钟解决VS每次运行都显示"正在还原nuget程序包"问题 参考文章: (1)1分钟解决VS每次运行都显示"正在还原nuget程序包"问题 (2)https: ...
- ubuntu16.04 每次开机都显示“System program problem detected”
问题:ubuntu16.04 每次开机都显示"System program problem detected",如下图所示: 解决办法: 在终端输入以下命令: sudo gedi ...
- juyter显示决策树图形_关于决策树可视化的treePlotter(学习笔记)
网上的版本好像好久都没更新了treePlotter是没有人用了么.今天学习的时候发现有些地方已经改了,我改的是在python 3.6 上的运行版本,需要导入matplotlib.pyplot impo ...
- 45 WebGL在页面上添加hud显示
案例查看地址:点击这里 平视显示器(head up display)简称HUD,最早用于飞机驾驶.平视显示器将一些重要信息投射到飞机驾驶舱前方的一块玻璃上,飞行员能够将外界的影像和这些重要的信息融合在 ...
- 计算机 最后 一次 开机时间 win 7,Win7如何每次开机都显示上次登录时间?开机显示上次开机时间方法...
有时候我们不想他人对自己的电脑进行设置,或查看里面的文件资料,那么有什么方法可以让我们快速的知道电脑有没有被人动过呢?其实Win7系统中有一个功能,可以显示上一次登录的时间,这样就可以知道到底有没有被 ...
- Ubuntu每次启动都显示System program problem detected的解决办法
方法1: sudo rm -rf /var/crash/* 方法2: sudo gedit /etc/default/apport 将enabled=1改为enabled=0保存退出即可 两种方法选择 ...
- Spring Boot基础学习笔记10:配置国际化页面
文章目录 零.学习目标 1.掌握使用Thymeleaf配置国际化页面 2.掌握Thymeleaf复杂数据的展示 一.使用Thymeleaf配置国际化页面 (一)创建Spring Boot项目 - Th ...
- pythonlist循环添加元素_list.append()在for循环中每次添加的都是最后的一个元素汗血宝马...
先贴出源码吧,这段代码我想返回一个list,list中的元素由N个dict组成, dict中会包含目录下文件的名称,大小和最后修改时间(ps.大小和最后修改时间没有贴出来) 1 2 3 4 5 6 7 ...
- * 完成随机点名案例;学生姓名都提前写在文件中;:每次敲回车,随机显示一个学生姓名,每人最多显示一次,所有人都显示完了就结束程序;
import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.IOExce ...
最新文章
- DNS自述:我是如何为域名找到家的
- Tom's Classes
- iOS开发里的Bundle是个啥玩意?!
- Node.js 应用的内存泄漏问题的检测方法
- elasticsearch-head 安装
- 好饭不怕晚,扒一下 Redis 的配置文件
- 将NGINX Plus配置为Web服务器
- 【C语言】scanf()输入浮点型数据
- linux怎么安装scp服务,linux下ssh安装与scp命令使用详解
- python装第三方库有几种方法_Python安装第三方库的4种方法
- 帮Python找“对象”
- rgba和hex之间转换
- 实体书回暖?码洋过10,000,000的随想
- STM32程序烧录方式总结
- 企业业务的 WPA3 安全性为啥如此重要?
- 台式计算机windows7系统怎么做,台式电脑如何安装win7系统
- 简单易懂!!shell循环语句!for、while、until
- 服务器一键系统,一键安装服务器系统
- switch确定某天是该年第几天
- Python学习手札01——二分法求值问题