精华帖 (0) :: 良好帖 (2) :: 新手帖 (1) :: 隐藏帖 (11)
|
|
---|---|
作者 | 正文 |
发表时间:2010-08-05
没有记录状态信息的局部变量
|
|
返回顶楼 | |
发表时间:2010-08-05
喷子们 用过struts2 spring吗?
|
|
返回顶楼 | |
发表时间:2010-08-05
是否多使用了一些Struts2的插件,比如那个Struts2 零配置插件convention-plugin就会让Struts自己创建线程安全的Action实例,而不用Spring创建,并且可以接收Spring注入的Service
|
|
返回顶楼 | |
发表时间:2010-08-05
s1和s2哪个是单例你分清了么?Webwork是命令模式实现,S2就是Webwork,什么是命令模式,LZ应该看看。
|
|
返回顶楼 | |
发表时间:2010-08-05
最后修改:2010-08-05
你把struts2-spring-plugin里的SpringStrutsObjectFactory.java(名字可能记错了)里关于创建action的代码读一读就明白是怎么回事了
记错了, 是在xwork里的SrpingObjectFactory /** * Looks up beans using Spring's application context before falling back to the method defined in the {@link * ObjectFactory}. * * @param beanName The name of the bean to look up in the application context * @param extraContext * @return A bean from Spring or the result of calling the overridden * method. * @throws Exception */ @Override public Object buildBean(String beanName, Map<String, Object> extraContext, boolean injectInternal) throws Exception { Object o = null; try { //先在WebApplicationContext中查找bean, 这里的beanName没有debug过, 理论上应该是action中配置的 //class o = appContext.getBean(beanName); } catch (NoSuchBeanDefinitionException e) { //action不是在spring中创建的话, 则由webwork自身实现的一套IOC进行bean的组装 Class beanClazz = getClassInstance(beanName); o = buildBean(beanClazz, extraContext); } if (injectInternal) { injectInternalBeans(o); } return o; } 上面的代码我没有仔细debug过, webwork的那一套ioc实现我也没有看过, 看样子是可以识别@Resource的注解的 我的理解, 关于为什么使用@Controller不标注@Scope, 也使struts2每次请求都重新创建action的关键在于 你action中class的配置, 如果是配置成为spring中bean的id, 使得ObjectFactory可以从spring中成功获取action, 而这时没有配置scope, 就有可能出现并发问题, 最近没空, 有时间的测试一下 |
|
返回顶楼 | |
发表时间:2010-08-05
好象compent,control,autowired这几种配置都可以
其实同问有用过struts2-spring吗? |
|
返回顶楼 | |
发表时间:2010-08-06
最后修改:2010-08-06
sarin 写道 s1和s2哪个是单例你分清了么?Webwork是命令模式实现,S2就是Webwork,什么是命令模式,LZ应该看看。
貌似没分清的是你吧,难道你敢说s2是单例。s2是webwork在这里的人都知道不要你说。还有s2用的模式多了,你一句Webwork是命令模式实现很雷人。 |
|
返回顶楼 | |
发表时间:2010-08-06
action的管理貌似是交给插件管理的,插件初始化Action时会参考Spring中的Bean容器,默认是按名字,所以写不写prototype不会影响Action
|
|
返回顶楼 | |
发表时间:2010-08-09
有了struts2-spring-plugin 即使struts.xml里Action的class写的不是bean id,一样受spring托管。
如果你使用struts2而不使用param拦截器好像太浪费了,而使用param显然意味着Action不能是单例的。 楼主明明是来分享自己对代码的分析的又不是来问问题的,怎么有人一上来就好为人师 |
|
返回顶楼 | |
发表时间:2010-08-10
最后修改:2010-08-10
kaowww153 写道
所以struts2(注解) 在和spring集成时action默认是new的,不用注解spring扫描action的话也是用的new。 而非注解时如果把action加入bean的话默认是单例的。 所以如果大家struts2是用注解的话就不需要在action上加@scope("prototype")了; struts2+spring 注解集成有 "零配置" 和"注解加xml混合配置"两种,根据业务的不同需求有不同的选择. |
|
返回顶楼 | |