struts2 整合spring的一种方式

其他方式不说,仅说这一种方式,我个人觉得这种方式很方便,struts2 的action 的配置无需变动,
也不用放到spring的xml中去管理action,action依然由struts控制管理,service层 以下的东西由
spring来管理。
首先用Listener的方式来启动spring:
在web.xml中加入listener:
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener>
</listener>
ContextLoaderListener 会使用contextConfigLocation参数,启动加载spring配置,建立WebApplicationContext,并将其保存在 ServletContext中,见spring中的源码:
------------------------------------------------------
.......
this.context = createWebApplicationContext(servletContext, parent);
servletContext.setAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_
CONTEXT_ATTRIBUTE, this.context);
........
------------------------------------------------------
然 后spring就启动好了,那么现在就是把spring整合到struts中来,
需要做的就是在struts的配置文件 struts.properties  中加入struts.objectFactory 和struts.objectFactory.spring.autoWire属性。
(当然这些属性也可以不用struts.properties,可以 写在struts.xml配置文件中,
使用: <constant name="struts.objectFactory" value="spring"/>
<constant name="struts.objectFactory.spring.autoWire" value="name"/>)
文件 struts.properties:
struts.objectFactory=spring
struts.objectFactory.spring.autoWire=name
...................
OK, action的配置不用理会spring,自己配置即可,现在需要spring做的就是
把service业务对象注入到struts的action 中。要做到这样仅需做以下步骤即可:
在action中声明service业务对象属性,如:
private UserService userService;
注意,必须为userService提供setter:
private UserService setUserService(UserService userService){
this.userService=userService;
}
然后在spring的配置文件 applicationContext.mxl中配置好UserService的bean。
注意其id必须和action中的 UserService属性的属性名一样:
...
<bean id="userService" class="com.yourcompany.service.impl.UserServiceImpl">
</bean>
...
注 意这里UserService 是接口,其实现类是: UserServiceImpl。
到此,简单的测试应用就可以正常工作了,web容器把控 制权交给struts的控制器 ActionServlet
后,ActionServlet会根据struts的配置信息获取到一个Action, 然后ActionServlet 会使用spring
来注入 Action 中对应的属性根据属性名。
另外如果你有特别需求,需要获取 到 spring的ApplicationContext上下文,并通过它来获取一些
bean的话,可以这样获取:
WebApplicationContextUtils.getRequiredWebApplicationContext(ServletContext) 来获取。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值