(转)spring struts2整合之action产生问题 springstruts2java
程序员文章站
2022-05-21 18:40:42
...
原文链接:[url]http://blog.csdn.net/ms2146/article/details/5546741 [/url]
Spring和Struts2的整合只需一个插件包,不过笔者在练习的过程中,被一个小问题给郁闷了好久。
按道理来说Spring和Struts2整合之后,Action的创建以及属性注入是有Spring来管理的,是否由Spring来管理Action的创建与属性注入还是要取决于我们的配置,如下为ModulAction的配置:
眨眼一看没有什么错误,不过要是和Spring整合之后就会发现Class处应为Spring中相应Action的id,不错,是这样的。那么要是我们的Class直接写成Action的全路径会有什么问题吗?问题是有的,慢慢分析。我们先试着在applicationContext.xml中配置上Action:
在Spring中是有配置businessService的,然后ModulAction属性:
启动工程,运行ModulAction,会发现service为null,为什么呢?上面的applicationContext.xml不是已经为Action注入了businessService么?问题就出在这了,这里的Action的控制权是由sturts掌管着,因为在struts.xml配置Action的时候为其指定Class的是类全名,而不是Spring中Aciton的id。所以当我们访问Action的时候首先由struts创建Action,然后在跟据Action的属性service去spring容器中去找id为service的bean,因为在spring容器中我们配置的是businessService名,所以struts会找不到他想要的bean,故为空,要是把action中的属性改为businessService那么就不会出null异常。
相反,要是把struts中action的class设置为spring容器中的bean的id时,action的创建及属性注入式有spring来管理的。
Spring和Struts2的整合只需一个插件包,不过笔者在练习的过程中,被一个小问题给郁闷了好久。
按道理来说Spring和Struts2整合之后,Action的创建以及属性注入是有Spring来管理的,是否由Spring来管理Action的创建与属性注入还是要取决于我们的配置,如下为ModulAction的配置:
<action name="modul" class="com.spl.action.ModulAction"> <result name="index">/modul/index.jsp</result> </action>
眨眼一看没有什么错误,不过要是和Spring整合之后就会发现Class处应为Spring中相应Action的id,不错,是这样的。那么要是我们的Class直接写成Action的全路径会有什么问题吗?问题是有的,慢慢分析。我们先试着在applicationContext.xml中配置上Action:
<bean id="modulAction" class="com.spl.action.ModulAction" scope="prototype"> <property name="service"> <ref bean="businessService"/> </property> </bean>
在Spring中是有配置businessService的,然后ModulAction属性:
BusinessService service; public BusinessService getService() { return service; } public void setService(BusinessService service) { this.service = service; }
启动工程,运行ModulAction,会发现service为null,为什么呢?上面的applicationContext.xml不是已经为Action注入了businessService么?问题就出在这了,这里的Action的控制权是由sturts掌管着,因为在struts.xml配置Action的时候为其指定Class的是类全名,而不是Spring中Aciton的id。所以当我们访问Action的时候首先由struts创建Action,然后在跟据Action的属性service去spring容器中去找id为service的bean,因为在spring容器中我们配置的是businessService名,所以struts会找不到他想要的bean,故为空,要是把action中的属性改为businessService那么就不会出null异常。
相反,要是把struts中action的class设置为spring容器中的bean的id时,action的创建及属性注入式有spring来管理的。
下一篇: Java编程之性能优化