web中单例模式?

为什么spring采用单例模式创建bean而struts的action要每次创建,这样有什么好处呢

1.struts的action每次创建:
用户发出请求request -- > action
a)假如此时用户正在根据 条件 查询记录,那么该操作的流程是:
1.在jsp页面会有个字段 name 表示 条件
2.在action有个属性 name
3.此时由于用户填写了name = "javaeye" 那么action中的name也等于javaeye.
b)如果action不是每次创建,而是只创建一次。
恰好此时用户的操作只是查询而不是条件查询会出现什么结果?
action已经存在,所以不会创建,那么其属性name的值还是javaeye.
这样本来是查询所有的记录,变成了条件查询。

2.spring采用单例模式创建bean
bean每创建一次都需要在内存中分配一个空间。这样会浪费空间,降低效率。
所以只所有创建一次即可,并且bean你们的操作主要是对数据库的操作,它的信息来源自action,只要保证action的信息唯一性,这里不需要每次创建。

要弄清楚这个问题,你要先了解什么是单例模式,单例模式一般在什么情况下使用,在此,给你介绍一本书,至于问题,楼上的说出了一部分,我想你知道了单例的概念,会对此有所了解的。

spring 里面可以单例 也 可以不用的,
单例模式的时候用来定义一些service business or factory or manager 之类的
因为这些类的作用都是创建模式的,不需要多个instance

struts的action 多instance 是为了并发而生的. struts1 就是单例, 但是在多并发下,由Class reflection invoke method 的时候却是thread block 的,
你可以写个类似struts framework test 看下,it's quit simple

spring中的单例的话一般都是无状态的,也就是没有成员变量,或者成员变量对应的类本身是没成员变量等等,

而struts的话,是有成员变量的,当然每个请求都有不同的参数,自然要每次新建一个实例