应用程序上下文。这是怎麽?

2022-09-01 00:38:46

我的同事经常使用“应用程序上下文”这个词。在许多文章中,这种搭配也经常使用。

我目前的理解是:应用程序上下文是单个xml文件。

但我明白,如果我是对的,人们就不会使用“应用程序上下文”而不是配置xml文件。

你能帮我处理这个问题吗?


答案 1

@feak给出了关于AppplicationContext在Spring方面的含义的直接答案。简而言之,它是一个加载配置的对象(通常是基于XML文件注释),然后Spring将开始管理bean及其优点:

  • 在包中声明的 Bean
  • 通过注释声明的 Bean
  • 构造函数和方法自动布线
  • 豆类注射
  • 配置、.属性和 .yaml 文件加载

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

  • 在应用程序开始时手动加载应用程序上下文。这是出于示例目的或在独立应用程序中完成的:

    public class Foo {
        public static void main(String[] args) {
            ApplicationContext context =
                new ClassPathXmlApplicationContext("path/to/applicationContext.xml");
            //use the context as you wish...
        }
    }
    
  • 如果 Java Web 应用程序使用 Spring MVC,它将为您加载应用程序上下文,因此您只需在应用程序的 WEB-INF 文件夹中创建一个 springapp-servlet.xml 文件。DispatchServlet

请注意,应用程序上下文与单个配置相关联(无论是否基于 XML)。时期。


了解了这一点后,您还可以了解每个应用程序可以有多个应用程序上下文。也就是说,在同一应用程序中具有两个或多个 s。从控制台应用程序中的最后一个示例中,这很容易检查: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 单例作用域是每个应用程序上下文的单例,这意味着在检索在 applicationContext 中配置的 Bean 时.xml文件与从 中检索它不同,但从 中检索多个 bean 将返回相同的 Bean 实例。Barcontextcontext2contextBar

这被认为是好的做法还是坏的做法?两者都不是,这将取决于要解决的问题(在最后一个例子的情况下,我会说这是一个不好的做法)。大多数人建议将所有Bean配置在一个地方(通过XML或其他方式),并由单个应用程序上下文加载。


答案 2

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

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

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

  1. Bean Factory - 负责创建称为Bean的java对象。一个示例是应用程序中的组件。
  2. 应用程序侦听器 - 事件所需的所有侦听器。
  3. 网络服务器信息。
  4. 应用程序当前环境特定信息。
  5. 资源模式解析器 - 具有路径匹配器的资源加载程序。
  6. 处理器的生命周期。
  7. 类装入器。
  8. 启动和关闭监视器。
  9. Servlet Context.
  10. 读取器和扫描仪。
  11. 记录

等。

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

我们可以在下面的快照中了解应用程序对象。

snapshot

总之,我们可以说应用程序上下文是为应用程序运行而创建的配置对象。

为“根 web 应用上下文”定义了 bean。它是一个Web感知的AppplicationContext。applicationContext.xml

它用于在 Web 应用程序中的所有 servlet 之间共享 Bean。

我希望这是有帮助的。


推荐