因为你每次请求的Action返回的状态未必相同,应该用prototype。但是像basedao这样在一个只会存在一个共享的bean时,就用singleton。(singleton意味对数据库的访问只能单线程,才能保证数据库数据的一致性,而网络访问由于每一个时间都不一样,所以struts的action应该用prototype保证你的访问返回的是你的当前访问状态,而且当某一线程出现问题时不影响其它线程或设置singleton="false")
其次,dao,service,使用单例。struts的action不使用单例。
dao层用hibernate,用来与数据库交互service用spring,用来注入,控制器用struts,spring默认设置为singleton。
当然,也可以设置scope="session",也能避免web中action的并发问题,只为当前用户创建一次bean,直至session消失。在这种情况下,对当前用户而言,bean是有状态的。好处就是少创建bean的实例,有那么一点点性能的提升