如何在Struts2的拦截器中调用Spring容器

第一种:

通常用ApplicationContext来调用Spring配置文件中的一些Bean,所以首先创建Spring上下文容器。

ApplicationContext ac = (ApplicationContext) invocation.getInvocationContext().getApplication().get(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE);

以上代码中invocation是Struts2拦截器方法intercept(ActionInvocation invocation)方法的参数

其中ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE在源码中是这样定义的:

String ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE = WebApplicationContext.class.getName() + ".ROOT";

所以通过此种方式可以得到ApplicationContext

第二种:

ServletContext sc=ServletActionContext.getServletContext();
ApplicationContext ctx=WebApplicationContextUtils.getWebApplicationContext(sc);

首先获取Servlet上下文(这是Struts2访问Servlet三种方式中的一种)

Spring给我们提供了WebApplicationContext的工具类很方便的访问WebApplicationContext,这种方式比上一种简单,

但是如果仔细查看WebApplicationContextUtils的getWebApplicationContext(ServletContext sc)的源码会发现还是会用到ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE,所以归根结底它们的原理一样。

public static WebApplicationContext getWebApplicationContext(ServletContext sc) {
        return getWebApplicationContext(sc, WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE);
    }

posted @ 2015-05-27 22:05  珍惜阳光  阅读(757)  评论(0编辑  收藏  举报