我有一个操作数据库的类 TestDAO在Spring中可配置 TestDAO 类为 单实例或着多实例(我看很多的教程设置的是单实例)而struts2中每一个请求会创建一个对象...那 struts2 通过 Spring来调用TestDAO 类的方法,不就会出现线程问题了????

解决方案 »

  1.   

    不会的。Spring是线程安全的。
      

  2.   


    那不是说..所有的struts2 的请求要1个1个的执行???
             那还用struts2 干什么呢?直接struts1算了...
      

  3.   


    Struts1 Action是单例模式并且必须是线程安全的,因为仅有Action的一个实例来处理所有的请求。单例策略限制了Struts1 Action能作的事,并且要在开发时特别小心。Action资源必须是线程安全的或同步的。 
    Struts2 Action对象为每一个请求产生一个实例,因此没有线程安全问题,实际上,servlet容器给每个请求产生许多可丢弃的对象,并且不会导致性能和垃圾回收问题.
    这只是线程问题上struts2的优势,之所以用它,因为它还有很多其他的优势,最体现的就是它的OGNL语言,所以你不能单一的说还用它干吗,要了解它所有和struts1的区别及该进.:~)
      

  4.   

    不是啊。...  我是问 在 struts2 中 通过 Spring来调用TestDAO 类(比如 SIUD)的方法,会不会出现线程问题了???? 
      

  5.   


    Struts2 Action对象为每一个请求产生一个实例,因此没有线程安全问题.
      

  6.   

    但是  
    Struts2 Action对象为每一个请求产生一个实例,但是这些实例都调用了
    Spring中配置为 单实例 TestDAO 类..如果 , Struts2 Action请求产生实例,比如2个请求 调用了 TestDAO 保存数据.
    应为TestDAO 为单实例,应该很容易出现问题.比如 第1个 请求用TestDAO 保存一半的时候  暂停了,
    第2个 请求 TestDAO 保存了数据.然后 第1个 继续,因为
    他们是公用了1个TestDAO所以应该会有问题吧
      

  7.   


    只要TestDAO不是线程安全的,
    struts,spring再怎么线程安全都没用。
    线程安全遵循不同原理,一个流程的环节上有一环不安全,整个流程就不安全。所谓线程安全,是要有范围的,比如说一个对象,不可能一个框架整个都是线程安全的。Struts1、2、spring,都是多线程的,不可能后台同时只处理一个请求,那样没有项目能用得起来。struts1是每个Action一个实例,但多个Action可以并发处理。
      

  8.   


    回头又看到这个帖子  上面是文档里的定义  以为你看了会明白:)
    其实  你还是不了解  struts1是单例模式就是为了确保它的线程是安全的
    而strtus2 由于是Action对象为每一个请求产生一个实例  所以无所谓线程安不安全的问题
    如果要像你这么去做  2个请求同时调用TestDao  那此时整体线程安不安全就已经下线到你的TestDao  如果此时你的TestDao内对线程加以控制了那就是安全  如果没有那整体当然还是不安全,但struts2的线程确一直是安全的,因为它为每一个请求产生了一个实例!
      

  9.   

    而struts2中每一个请求会创建一个对象... 
    不一定吧,没设置参数吗?
    07年看的structs2.忘差不多了。就记得配置文件太多,,,其实,有环境的话做个简单测试就出来了
      

  10.   

    struts2 和 struts比较一下就知道啦,他们的Action一个是同步的,一个不是,不就OK啦,
      

  11.   

    一般的DAO都是无状态的,所以不会产生线程安全问题