zoukankan      html  css  js  c++  java
  • 如何在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);
        }

  • 相关阅读:
    做了点数论的题
    2016日报总结
    2016在H3C
    2017春节小目标
    2016项目小总结
    明明的随机数
    计算字符个数
    字符串最后一个单词的长度
    字符串分隔
    考研回忆
  • 原文地址:https://www.cnblogs.com/liuruowang/p/4534533.html
Copyright © 2011-2022 走看看