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融为一体。