• 如何在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);
        }

  • 相关阅读:
    python的logging库
    python的os库
    python的setup和teardown
    CF339D Xenia and Bit Operations线段树
    poj3311Hie with the Pie状压dp
    poj3254Corn Fields状压Dp
    CF414BMashmokh and ACMDP
    母函数6连杀
    母函数hdu1085
    UVA 1401Remember the WordDp
  • 原文地址:https://www.cnblogs.com/liuruowang/p/4534533.html
Copyright © 2020-2023  润新知