Java 应用程序上下文。这是什么?

Java 应用程序上下文。这是什么?,java,spring,spring-mvc,configuration,config,Java,Spring,Spring Mvc,Configuration,Config,我的同事经常使用“应用程序上下文”这个词。在许多文章中,这种搭配也经常使用 我目前的理解是:应用程序上下文是单个xml文件 但我明白,如果我是对的,人们不会使用“应用程序上下文”而不是配置xml文件 您能帮我解决这个问题吗?我想您的同事指的是加载的spring应用程序上下文,它允许访问: 应用程序的配置 初始化的bean 应用程序事件api 等 @feak从春天的角度给出了一个直截了当的答案。简而言之,它是一个加载配置(通常是基于XML文件注释)的对象,然后Spring将开始管理bean及其好

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

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

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


您能帮我解决这个问题吗?

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

  • 应用程序的配置
  • 初始化的bean
  • 应用程序事件api

    • @feak从春天的角度给出了一个直截了当的答案。简而言之,它是一个加载配置(通常是基于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
      s。从console应用程序中的最后一个示例来看,这很容易检查:

      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配置的应用程序上下文。你能做到吗?是的,你真的看到了。那有什么区别呢?main的区别在于SpringBeans的单例作用域是单例的,这意味着当从
      context
      检索applicationContext.xml文件中配置的
      bean时,它与从
      context2
      检索它的作用域将不同,但是从
      context
      中检索的几个将返回相同的
      Bar
      bean实例


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

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

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

      它提供了应用程序所需的全部配置:

    • Bean工厂-负责创建名为Bean的java对象。一个例子是应用程序中的组件
    • 应用程序侦听器-事件所需的所有侦听器
    • 网络服务器信息
    • 应用程序当前特定于环境的信息
    • 资源模式解析器-带有路径匹配器的资源加载程序
    • 生命周期处理器
    • 类加载器
    • 启动和关闭监视器
    • Servlet上下文
    • 阅读器和扫描仪
    • 记录器
    • 等等

      package com.srmhitter9062.spring;
      导入org.springframework.beans.BeansException;
      导入org.springframework.context.ApplicationContext;
      导入org.springframework.context.ApplicationContextAware;
      公共类ApplicationContextUtils实现ApplicationContextAware{
      私有静态应用程序上下文ctx;
      @凌驾
      public void setApplicationContext(ApplicationContext appContext)
      抛出BeansException{
      ctx=appContext;
      }
      公共静态应用程序上下文getApplicationContext(){
      返回ctx;
      }
      }
      
      我们可以在下面的快照中了解应用程序对象

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

      applicationContext.xml
      定义了“根webapp上下文”的bean。这是一个web感知的应用程序上下文

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


      我希望这是有帮助的。

      xml文件和“应用程序上下文”应用程序上下文和SpringXML文件之间的区别是不同的术语。可以使用一个、两个或更多xml文件初始化一个应用程序上下文。此外,可以使用不带xml文件的/@配置类初始化应用程序上下文。所以,我想说xml和/@Configuration是配置上下文的方法。应用程序可以有几个应用程序上下文。每个上下文都有特定的设置。有些任务需要这样的方法(在某些情况下)。我没有机会去做it@Shamse我想homeAccount也明白了。为什么不回答这个问题,而跳出一个新的问题呢?您能解释一下单一应用程序上下文和单一xml之间的区别吗file@homeAccount你还不明白什么?XML文件定义配置,应用程序上下文从该文件加载配置,Spring开始处理定义的bean。一个上下文可以使用多个XML文件。怎么用?我不明白什么时候我使用了很多上下文,什么时候我使用了单个上下文。我怎么能理解这个xml与哪个上下文有关呢