读书人

struts2与spring调整时bean作用域scope

发布时间: 2012-09-11 10:49:03 作者: rapoo

struts2与spring整合时bean作用域scope
struts2跟spring整合的时候
<bean id="carModelAction" scope="prototype">
<property name="voteDAO" ref="voteDAO" />
<dwr:remote javascript="carModelAction"></dwr:remote>
</bean>
spring中的bean节点默认是singleton项目中的增删改查只针对一个action。
当应用struts2的时候若bean节点不使用prototype会使线程不安全出现不可预知的错误。比如有两个action。
userAction:

    public class userAction {   private String username;    private String pass;    public String check(String code){String result = "ok";return result;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPass() {return pass;}public void setPass(String pass) {this.pass = pass;}}

puserAction:
 public class puserAction {    private String username;    private String pass;    public String check(String code){String result = "ok";return result;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPass() {return pass;}public void setPass(String pass) {this.pass = pass;}}

若bean节点scope不是prototype会造成usename和pass参数的覆盖(应该属于线程泄露吧)造成不可预知的CRUD后果。


顺便提一下struts与struts2这方面处理时的不同。struts与spring整合采用单例模式只创建一个action 那他为什么不会出现像struts2那样的错误呢。因为struts利用actionForm保证了form中参数的唯一性。一个action对应一个相应的actionForm,但是struts2没有啊他已经取消了actionForm那种做法采用的action方法与actionForm融为一体。

读书人网 >软件架构设计

热点推荐