關於struts和Spring 結合到一起之后存在ACtion創建單實例還是多


struts 2的Action是多實例的並非單例,也就是每次請求產生一個Action的對象。原因是:struts 2的Action中包含數據,例如你在頁面填寫的數據就會包含在Action的成員變量里面。如果Action是單實例的話,這些數據在多線程的環境下就會相互影響,例如造成別人填寫的數據被你看到了。所以Struts2的Action是多例模式的。

     問題出現了,可以讓struts2的action變成單例模式么?我在使用spring來生成action的時候,發現生成的action居然全是單例的。這不是讓我的程序默認就跑出bug來么?上個用戶提交的信息,如果下個用戶沒填,居然跑到上個用戶輸入的信息去了。

     如果單例改成多例,會報一個action找不到的異常,可能是你在方法之中時用到的變量你沒有傳值,action報錯比較奇怪

     Invalid action class configuration that references an unknown class named [adminLogQueryAction]

     檢查前台提交參數和后台接收值,和方法需要的值

背景 :

1) Struts2 會對每個瀏覽器,產生一個Action的實例來處理.

2) Spring的Ioc容器管理的bean默認是單實例的.

首先從數據安全性的問題上考慮,我們的Action應該保證是多例的,這樣才不會出現數據問題。但是如果有的action比如只有admin才能操作,或者某些action,全站公用一個來提高性能,這樣的話,就可以使用單例模式。

不過幸好,Spring的bean可以針對每一個設置它的scope,所以,上面的問題就不是問題了。如果用多例,就在spring的action bean配置的時候設置scope="prototype".好吧,問題到此結束。

 

 

Xml代碼   收藏代碼
  1. <!--多例-->  
  2. <bean id="localFileTaskConFigureAction" class="com.top.fgap.localfiletask.action.LocalFileTaskConAction" scope="prototype">  
  3.         <property name="localFileTaskConfigureService">  
  4.             <ref bean="localFileTaskConfigureService"/>  
  5.         </property>  
  6.     </bean>  
  7. <!--默認情況下是單例-->  
  8.     <bean id="locFTIpFilterAction" class="com.top.fgap.localfiletask.action.LocFTIpFilterAction">  
  9.         <property name="localIpFilterService">  
  10.             <ref bean="locFTIpFilterService"/>  
  11.         </property>  
  12.     </bean>  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM