spring整合struts2的问题
软件结构是顶层是struts的Action,接下来是业务处理层service和数据库交互层dao,service和dao的实现类都是单例模式,用了@service和@repository修饰。想不明白的是网上说的Action除了要用@Controller修饰,还需要用
@Scope("prototype")修饰符指定为多例模式,但是Action本身不就是多例模式吗?而且它也是软件中的控制器,是否可以不写Action的这2个注解,不写会有什么影响?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(8)
要写的,因为Struts与spring整合,是将创建Action的权利交给spring,而spring创建action默认是单例的,struts默认是多例的,所以要写@scrope(type=prototype),@Controller是spring的注解,意思是反转控制,将创建action的权利交给spring,如果你没有在applicationContext.xml中配置action的<bean>,那么就要再action类上加上该注解
哪又怎么样,你很高端?呵呵
问这种问题就表示你是一个JAVA小白 呵呵
Struts2的Controller要原型,是因为会有成员属性,每次请求,成员属性需要单独初始化,否则会乱。
SpringMVC的Controller单例,是因为它不需要成员属性,针对某个方法的Controller,就算在Struts2中的成员属性需要迁移到SpringMVC,也是作为方法的入参处理的。
对象都由spring来管理,就按照spring的规则来吧
亲,Spring 推荐的是单例并不是多例哦。Spring为什么默认的都是单例?为什么Spring mvc的Controller也是单例?
谢谢
还是写上吧,因为你把struts2的核心控制器也就是action类交给spring去管理,在spring中以bean的形式去管理,我们都知道bean是默认单例的。
但是action有存储数据的作用域,为了保证每个用户访问action的时候操作自己的数据,所以action类必须设置成多例的,@Scope("prototype")这个注解让action变成多例的