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);
        }

  • 相关阅读:
    征集佳句精妙SQL语句收集
    SQL操作全集
    用DirectX Audio和DirectShow播放声音和音乐(1)
    用DirectX Audio和DirectShow播放声音和音乐
    C# 中的委托和事件
    c#开发IE控件
    使用DIRECTX 优化声音特性
    Windows Mobile下播放PCM音频的双缓冲用法
    ASP.NET事务处理和异常处理
    [原]多线程控件返回主线程时显示文本
  • 原文地址:https://www.cnblogs.com/liuruowang/p/4534533.html
Copyright © 2011-2022 走看看