当前位置: 首页 > 知识库问答 >
问题:

Spring MVC中的ApplicationContext和WebApplicationContext之间有什么区别?

子车安和
2023-03-14

我知道webapplicationcontext用于面向Spring MVC体系结构的应用程序?

我想知道applicationcontext在MVC应用程序中有什么用途?在applicationcontext中定义了什么样的bean

共有1个答案

丁嘉庆
2023-03-14

Web Application context扩展的Application context,它被设计为与标准javax.servlet.ServletContext一起工作,以便能够与容器通信

public interface WebApplicationContext extends ApplicationContext {
    ServletContext getServletContext();
}

在WebApplicationContext中实例化的Bean如果实现ServletContextAware接口,也将能够使用ServletContext

package org.springframework.web.context;
public interface ServletContextAware extends Aware { 
     void setServletContext(ServletContext servletContext);
}

对于ServletContext实例,可以做很多事情,例如通过调用getResourceStream()方法访问WEB-INF资源(xml配置等)。通常,servlet Spring应用程序中在Web.xml中定义的所有应用程序上下文都是Web应用程序上下文,这既包括根webapp上下文,也包括servlet的app上下文。

此外,依赖于web应用程序上下文功能可能会使您的应用程序更难测试,您可能需要使用MockServletContext类进行测试。

这允许您将一些服务作为整个应用程序的单例运行(Spring Security bean和基本数据库访问服务通常驻留在这里),将另一些服务作为相应servlet中的独立服务运行,以避免bean之间的名称冲突。例如,一个servlet上下文将为web页面提供服务,另一个将实现无状态web服务。

当您使用spring servlet类时,这种两个级别的分离就会出现:要配置根应用程序上下文,您应该在web.xml中使用context-param标记

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
        /WEB-INF/root-context.xml
            /WEB-INF/applicationContext-security.xml
    </param-value>
</context-param>

(根应用程序上下文由Web.xml中声明的ContextLoaderListener创建。)

<listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener> 

)和servlet标记,用于servlet应用程序上下文

<servlet>
   <servlet-name>myservlet</servlet-name>
   <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
   <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>app-servlet.xml</param-value>
   </init-param>
</servlet>

请注意,如果init-param将被省略,那么spring将在本例中使用myServlet-servlet.xml。

 类似资料:
  • 问题内容: 应用程序上下文和Web应用程序上下文之间有什么区别? 我知道用于Spring MVC架构的应用程序吗? 我想知道应用程序中有什么用途?什么样的豆类被定义? 问题答案: Web应用程序上下文扩展了应用程序上下文,该上下文旨在与标准javax.servlet.ServletContext一起使用,因此能够与容器进行通信。 如果WebBean中实现ServletContextAware接口,

  • 1、BeanFactory是Spring的最底层接口,包含bean的定义,管理bean的加载,实例化,控制bean的生命周期,特点是每次获取对象时才会创建对象。 ApplicationContext是BeanFactory的子接口,拥有BeanFactory的全部功能,并且扩展了很多高级特性,每次容器启动时就会创建所有的对象。 ApplicationContext的额外功能: 继承MessageS

  • 问题内容: 在此示例中: 无法编译为: 而被编译器接受。 这个答案说明唯一的区别是,与不同,它允许您稍后引用类型,似乎并非如此。 是什么区别,并在这种情况下,为什么不第一编译? 问题答案: 通过使用以下签名定义方法: 并像这样调用它: 在jls§8.1.2中,我们发现(有趣的部分被我加粗了): 通用类声明定义了一组参数化类型(第4.5节), 每种可能通过类型arguments调用类型参数节的类型

  • 我刚接触Spring,我读到BeanFactory也称为基本IOC,ApplicationContext称为高级IOC。 我读到: BeanFactory容器是为DI提供基本支持的最简单的容器,由org.springframework.beans.factory.BeanFactory接口定义。BeanFactory和相关接口,如BeanFactoryAware、InitializingBean、

  • 问题内容: 我是AngularJS的新手。谁能解释一下这些AngularJS运算符之间的区别:用适当的示例隔离范围时。 问题答案: 允许将在指令属性上定义的值传递到指令的隔离范围。该值可以是简单的字符串值(),也可以是带有嵌入式表达式()的AngularJS插值字符串。可以将其视为从父作用域到子指令的“单向”通信。约翰·林德奎斯特(John Lindquist)进行了一系列简短的电视广播,解释了每

  • 问题内容: 我是AngularJS的新手。谁能解释一下这些AngularJS运算符之间的区别:用适当的示例隔离范围时。 问题答案: 允许将在指令属性上定义的值传递到指令的隔离范围。该值可以是简单的字符串值(),也可以是带有嵌入式表达式()的AngularJS插值字符串。将其视为从父作用域到子指令的“单向”通信。 允许指令的隔离范围将值传递到父范围中,以便在属性中定义的表达式中进行求值。请注意,指令