ordinary_zhuhe
2010-03-11 13:49 阅读 241
已采纳

web中单例模式?

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

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

4条回答 默认 最新

  • 已采纳
    xwz_adolf xwz_adolf 2010-03-11 14:01

    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的信息唯一性,这里不需要每次创建。

    点赞 评论 复制链接分享
  • iteye_566 iteye_566 2010-03-11 14:20

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

    点赞 评论 复制链接分享
  • iteye_15594 iteye_15594 2010-03-11 14:22

    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

    点赞 评论 复制链接分享
  • wanghaolovezlq wanghaolovezlq 2010-03-16 22:05

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

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

    点赞 评论 复制链接分享

相关推荐