web 单例 多例

单例多例需要搞明白两个问题:
1. 什么是单例多例;
2. 如何产生单例多例;
3. 为什么要用单例多例
4. 什么时候用单例,什么时候用多例;
1. 什么是单例多例:
所谓单例就是所有的请求都用一个对象来处理,比如我们常用的service和dao层的对象通常都是单例的,而多例则指每个请求用一个新的对象来处理,比如action;
2. 如何产生单例多例:
    在通用的SSH中,单例在spring中是默认的,如果要产生多例,则在配置文件的bean中添加scope="prototype";
3. 为什么用单例多例:
    之所以用单例,是因为没必要每个请求都新建一个对象,这样子既浪费CPU又浪费内存;
   之所以用多例,是为了防止并发问题;即一个请求改变了对象的状态,此时对象又处理另一个请求,而之前请求对对象状态的改变导致了对象对另一个请求做了错误的处理;
    用单例和多例的标准只有一个:
    当对象含有可改变的状态时(更精确的说就是在实际应用中该状态会改变),则多例,否则单例;
4. 何时用单例?何时用多例?
    对于struts2来说,action必须用多例,因为action本身含有请求参数的值,即可改变的状态;
  而对于STRUTS1来说,action则可用单例,因为请求参数的值是放在actionForm中,而非action中的;
   另外要说一下,并不是说service或dao一定是单例,标准同第3点所讲的,就曾见过有的service中也包含了可改变的状态,同时执行方法也依赖该状态,但一样用的单例,这样就会出现隐藏的BUG,而并发的BUG通常很难重现和查找;

时间: 2024-12-19 17:43:32

web 单例 多例的相关文章

单例多例

单例多例需要搞明白两个问题:1. 什么是单例多例:2. 如何产生单例多例:3. 为什么要用单例多例4. 什么时候用单例,什么时候用多例:1. 什么是单例多例:所谓单例就是所有的请求都用一个对象来处理,比如我们常用的service和dao层的对象通常都是单例的,而多例则指每个请求用一个新的对象来处理,比如action; 2. 如何产生单例多例:    在通用的SSH中,单例在spring中是默认的,如果要产生多例,则在配置文件的bean中添加scope="prototype"; 3. 为

Spring中构造器、init-method、@PostConstruct、afterPropertiesSet孰先孰后,自动注入发生时间以及单例多例的区别

首先明白,spring的IOC功能需要是利用反射原理,反射获取类的无参构造方法创建对象,如果一个类没有无参的构造方法spring是不会创建对象的.在这里需要提醒一下,如果我们在class中没有显示的声明构造方法,默认会生成一个无参构造方法,但是当我们显示的声明一个有参构造方法的时候,JVM不会帮我们生成无参构造方法,所以我们声明一个带参数的构造方法也需要声明一个无参构造方法.(题外话:如果父类声明一个有参构造方法,子类需要在构造方法第一行显示的调用父类构造方法,因为子类的对象也是父类的对象,所以

Spring中单例多例面试题分析

面试题 1.Spring是单例还是多例,怎么修改? Spring的bean默认是单例的(sigleton)可以修改为多例(prototype), 在此bean节点中添加一个属性,scope="prototype"; 例如<bean id="xxx" class="全类名" scope="prototype"></bean> <?xml version="1.0" encodin

html5手机Web单页应用实践--起点移动阅读

一开始以hybrid形式做了一个android的小说阅读客户端,叫4G阅读.而后由于业务需求,要迅速实现纯手机html5 版的,所以就直接在原先客户端内内嵌的网页进行改版,快速实现以后在优化的过程中发现越改越多越改越多- 注意此web应用只支持android及iphone内的浏览器,及PC或mac上的chrome,safari,firefox等支持html5的浏览器.IE10以上浏览器 这算是试验版了吧,以前没这么弄过.. 手机访问http://crapi.4gshu.com:8096/4g-r

struts2的单例多例问题

我想大家都知道struts2默认就是多例的,而spring默认都是例的,如果二者集成,那action会是单例还是多例呢? 首先我们先回顾一下struts2和spring的两种整合方式: 1. 由spring来创建和管理action,即在action上增加@Controller注解,如果是xml方式的话,就是在spring中增加action的配置,而在struts2的xml中,配置的class的直接指向spring中的配置类,如 <bean id="LoginAction" cla

robot+selenium编写web UI自动化用例

通常我们可以用robot framework写接口自动化用例,但是有些站点如果未做前后端分离,迭代过程中又有大量的重复测试工作量,没有接口可调用验证,也有自动化测试需求,怎么办?这时候,那个深坑频现的web UI自动化就势在必行了.robot只是自动化框架,好在他稳定而且扩展性极好,要想驱动web浏览器自动干活,只需要安装另外一个神器selenium,下文将提纲携领介绍web UI如何入门,一旦你入了门,其余的就是baidu和看官网帮助的工作量了,建议用到了在查,不然也没卵用. 用例编写前提:

简单多线程和单例学习例一

这是一个简单的面试题: 写一个简单的单例和多线程结合的例子; 代码: 单例代码: public class Singleton { private int i = 0; //在类内部实例化单例, 将会在虚拟机启动加载类的时候加载该静态实例 private static Singleton singleton = new Singleton(); //自由化构造函数,以确保不会被外部类实例化 private Singleton() { System.out.println("初始化单例!"

python3+Robot Framework+PyCharm第一个WEB UI自动化用例

这里只是列举一个很简单的例子,简单介绍工具的使用,编写用例之前,做好WEB UI自动化的准备工作,下载好chrome驱动(这里以chrome为例,不同浏览器有对应的驱动),注意驱动和浏览器版本要对应,不然启动浏览器会抛异常.例外要格外注意的就是编写用例的时候空格,关键字和参数直接是一个table制表符,也就是4个空格,建议在IDE里面把 · 设置出来,方便检查格式,这里就没有RIDE好用了,RIDE是纯表格式编程,希望python3能够尽快出个稳定版本的RIDE,造福大家~~ 测试报告 原文地址

SipringBoot+VUE+GitHub+IDEA+Maven+Jenkins搭建Web开发环境样例

一.安装JDK                                                                                                                                                                                                             二.安装配置GitHub