sping+struts2中配置Action的bean中scope="prototype"的作用
sping+struts2中配置Action的bean中scope="prototype"的作用
????? 昨天发了一篇文章《奇妙的paramsPrepareParamsStack——Struts2中ModelDriven问题》其实那也不是原因是根本,那个解决方法还是一样如我前面采用的方法:在每次转向之前把对象清空然后初始化一下。只是昨天是在每次调用方法之前在值注入之前先清空初始化了一下。
????? 发现自己在开发中就如田埂上突然冒出个洞,田埂上的田里的水流入我的田里,可我根本不去查明到底是老鼠,蛇还是其他虫子打的洞,而是发现一个洞补一个洞的做法。——真是大忌啊!
????? 今天又搜索了一下才发现原来是这个问题:
???? 下面是struts2+hibernate+spring配置文件的一部分,以前都是仿造已经写好的bean的配置。有一次 scope="prototype"忘记写了结果出了问题 ,其默认是scope="singleton",唯一的。
????? 项目中对一个表的增删该操作是用一个action,这个action有add,update,delete,save这些方法,添加和修改是共用一个页面,当页面得到id时代表进行的修改操作,反之是添加操作。因为在配置spring的bean是忘了写scope="prototype"所以每次添加时都显示最后一次访问过的记录。
?????? 找了很长时间,原来是spring bean出了问题。 scope="prototype" 会在该类型的对象被请求时创建一个新的action对象。如果没有配置scope=prototype则添加的时候不会新建一个action,他任然会保留上次访问的过记录的信息。
<bean id="assetAction" scope="prototype">
<property name="assetManager" ref="assetManager"/>
<property name="itProductManager" ref="itProductManager"/>
<property name="vendorManager" ref="vendorManager"/>
<property name="deptManager" ref="deptManager"/>
<property name="userManager" ref="userManager"/>
<property name="assetTypeManager" ref="assetTypeManager"/>
??? </bean>
?
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/foamflower/archive/2009/07/08/4329989.aspx