应用上下文。这是什么?

新手上路,请多包涵

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

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

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

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

原文由 homeAccount 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 842
2 个回答

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

  • 在包中声明的 Bean
  • 注释声明的 Bean
  • 构造函数和方法自动装配
  • Bean注入
  • 配置、.properties 和 .yaml 文件加载
  • ETC

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

  • 在应用程序开始时手动加载应用程序上下文。这是出于示例目的或在独立应用程序中完成的:
   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 s。从控制台应用程序的最后一个示例中,这很容易检查:

 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 单例范围是 每个应用程序上下文 的单例,这意味着当从 --- 检索 Bar 在 applicationContext.xml 文件中配置的 bean context 将与 检索不同它来自 context2 ,但是来自 context 的几次检索将返回相同的 Bar bean 实例。

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

原文由 Luiggi Mendoza 发布,翻译遵循 CC BY-SA 4.0 许可协议

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

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

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

  1. Bean Factory - 负责创建称为 beans 的 java 对象。一个例子是应用程序中的组件。
  2. 应用程序侦听器 - 事件所需的所有侦听器。
  3. 网络服务器信息。
  4. 应用程序当前环境特定信息。
  5. 资源模式解析器 - 带有路径匹配器的资源加载器。
  6. 生命周期处理器。
  7. 类加载器。
  8. 启动和关闭监视器。
  9. 小服务程序上下文。
  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;
    }
}

我们可以在下面的快照中了解有关 Application 对象的一些信息。

快照

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

applicationContext.xml 定义了“root webapp context”的bean。这是一个 Web 感知的 ApplicationContext。

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

我希望这是有帮助的。

原文由 Siyaram Malav 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题