Spring MVC 应用程序上下文,这是什么?

b1payxdu  于 2022-11-24  发布在  Spring
关注(0)|答案(4)|浏览(230)

我的同事们经常使用“应用上下文”这个词。在许多文章中这个搭配也经常使用。
我目前的理解是:应用上下文是单个XML文件。
但我明白,如果我是对的,人们就不会使用“应用程序上下文”来代替配置xml文件。
你能帮我处理这个问题吗?

qlvxas9a

qlvxas9a1#

@feak直接回答了ApplicationContext在Spring中的意义,简而言之,它是一个加载配置的对象(通常是基于XML文件注解的),然后Spring将开始管理bean及其优点:

  • 包中声明的Bean
  • 由注解声明的Bean
  • 构造器和方法自动安装
  • 菜豆注射液
  • 配置、.properties和.yaml文件加载
  • 等等

要启动应用程序上下文,可以使用以下方法之一:

  • 在应用程序开始时手动加载应用程序上下文。此操作仅用于示例或在独立应用程序中执行:
public class Foo {
    public static void main(String[] args) {
        ApplicationContext context =
            new ClassPathXmlApplicationContext("path/to/applicationContext.xml");
        //use the context as you wish...
    }
}
  • 对于使用Spring MVC的Java Web应用程序,DispatchServlet将为您加载应用程序上下文,因此您只需在应用程序的WEB-INF文件夹中创建一个 springapp-servlet.xml 文件。

请注意,应用程序上下文与单个配置相关联(是否基于XML)。期间。
理解了这一点之后,您也可以理解每个应用程序可以有多个应用程序上下文。也就是说,在同一个应用程序中有两个或更多的ApplicationContext。从控制台应用程序的最后一个示例中,这一点很容易检查:

public class Foo {
    public static void main(String[] args) {
        ApplicationContext context =
            new ClassPathXmlApplicationContext("path/to/applicationContext.xml");
        ApplicationContext context2 =
            new ClassPathXmlApplicationContext("path/to/applicationContext.xml");
        //use the context as you wish...
    }
}

请注意,我们有两个应用程序上下文使用相同的XML配置。您能做到这一点吗?是的,您实际上在这里看到了它。那么,有什么区别呢?主要区别在于Spring bean单例作用域是每个应用程序上下文的单例,这意味着当从context检索applicationContext.xml文件中配置的Bar bean时,将与从context2检索它不同,但是从context的几次检索将返回相同的Bar bean示例。
这被认为是一个好的还是坏的实践?都不是,这将取决于要解决的问题(在最后一个例子中,我会说这是一个
的实践)。大多数人会建议在一个地方配置所有的bean(通过XML或其他),并由一个应用程序上下文加载。

vxbzzdmp

vxbzzdmp2#

让我们用简单的话来理解这一点。

ApplicationContext是Spring应用程序中的中央接口,用于向应用程序提供配置信息。它在应用程序开始运行时创建。

它提供了我们的应用程序所需的完整配置:

  1. Bean Factory -负责创建称为Bean的java对象。应用程序中的组件就是一个示例。
    1.应用程序侦听器-事件所需的所有侦听器。
  2. Web服务器信息。
    1.应用程序当前环境特定信息
    1.资源模式解析器-带有路径匹配器的资源加载器。
    1.生命周期处理器。
    1.类别载入器。
    1.启动和关闭监视器。
  3. Servlet上下文。
    1.阅读器和扫描仪。
    1.记录器
    等等。
package com.srmhitter9062.spring;
    
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
    
public class ApplicationContextUtils implements ApplicationContextAware {
    
    private static ApplicationContext ctx;
    
    @Override
    public void setApplicationContext(ApplicationContext appContext)
            throws BeansException {
        ctx = appContext;
    
    }
    
    public static ApplicationContext getApplicationContext() {
        return ctx;
    }
}

在下面的快照中,我们可以了解一些关于Application对象的情况。

总之,我们可以说应用程序上下文是为运行应用程序而创建的配置对象。
applicationContext.xml定义了“根webapp上下文”的bean。它是一个Web感知的ApplicationContext。
它用于在Web应用程序中的所有Servlet之间共享Bean。
我希望这对你有帮助。

afdcj2ne

afdcj2ne3#

我猜您的同事指的是加载的spring应用程序上下文,它允许访问:

  • 应用程序配置,
  • 初始化的bean,
  • 应用事件API,
  • 等等
0qx6xfy6

0qx6xfy64#

javadoc
为应用程序提供配置的中央接口。在应用程序运行时,此接口是只读的,但如果实现支持此接口,则可以重新加载。
应用程序上下文提供:[...]

相关问题