正如前面提到的,你可以使用 WebApplicationContextUtils 类从 ServletContext 中获得WebApplicationContext 。 另一个简单的办法是继承 Spring 的 Action 类。举个例子,除了继承Struts 的 Action 之外,你也可以继承 Spring 的 ActionSupport 类。
ActionSupport 类提供了一些便利的方法,例如 getWebApplicationContext()。下面的例子展示了如何在 Action 中使用它:
- publicclassUserActionextendsDispatchActionSupport{
- publicActionForwardexecute(ActionMappingmapping,
- ActionFormform,
- HttpServletRequestrequest,
- HttpServletResponseresponse)throwsException{
- if(log.isDebugEnabled()){
- log.debug("entering'delete'method...");
- }
- WebApplicationContextctx=getWebApplicationContext();
- UserManagermgr=(UserManager)ctx.getBean("userManager");
- //talktomanagerforbusinesslogic
- returnmapping.findForward("success");
- }
- }
public class UserAction extends DispatchActionSupport { public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { if (log.isDebugEnabled()) { log.debug("entering 'delete' method..."); } WebApplicationContext ctx = getWebApplicationContext(); UserManager mgr = (UserManager) ctx.getBean("userManager"); // talk to manager for business logic return mapping.findForward("success"); } }
Spring 包含了所有标准 Struts Action 的子类 - Spring 版本在类名末尾附加了Support:
ActionSupport,
DispatchActionSupport,
LookupDispatchActionSupport
MappingDispatchActionSupport
你应该选择最适合你项目的集成方式。继承使得你的代码更可靠,并且你确切地知道依赖关系是如何被解析的。 另一方面,使用ContextLoaderPlugin 允许你方便地在context XML 文件里面增加新的 依赖关系。这两种集成方法,不管哪一种Spring 都提供了相当好用的选项。