struts和spring整合创建Action对象的问题?

 SpringStruts2的整合只需一个插件包,不过笔者在练习的过程中,被一个小问题给郁闷了好久。

按道理来说SpringStruts2整合之后,Action的创建以及属性注入是有Spring来管理的,是否由Spring来管理Action的创建与属性注入还是要取决于我们的配置,如下为ModulAction的配置:

 

  1. <action name="modul" class="com.spl.action.ModulAction">  
  2.             <result name="index">/modul/index.jsp</result>  
  3.         </action>  

    眨眼一看没有什么错误,不过要是和Spring整合之后就会发现Class处应为Spring中相应Actionid,不错,是这样的。那么要是我们的Class直接写成Action的全路径会有什么问题吗?问题是有的,慢慢分析。我们先试着在applicationContext.xml中配置上Action:

  1. <bean id="modulAction" class="com.spl.action.ModulAction" scope="prototype">  
  2.             <property name="service">  
  3.                 <ref bean="businessService"/>  
  4.             </property>          
  5.         </bean>  

   在Spring中是有配置businessService的,然后ModulAction属性:

 

  1. BusinessService service;  
  2.     public BusinessService getService() {  
  3.         return service;  
  4.     }  
  5.     public void setService(BusinessService service) {  
  6.         this.service = service;  
  7.     }  

   启动工程,运行ModulAction,会发现servicenull,为什么呢?上面的applicationContext.xml不是已经为Action注入了businessService么?问题就出在这了,这里的Action的控制权是由sturts掌管着,因为在struts.xml配置Action的时候为其指定Class的是类全名,而不是SpringAcitonid。所以当我们访问Action的时候首先由struts创建Action,然后在跟据Action的属性servicespring容器中去找idservicebean,因为在spring容器中我们配置的是businessService名,所以struts会找不到他想要的bean,故为空,要是把action中的属性改为businessService那么就不会出null异常。

   相反,要是把struts中action的class设置为spring容器中的bean的id时,action的创建及属性注入式有spring来管理的。


转载自:http://blog.csdn.net/ms2146/article/details/5546741

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值