当前位置: 首页 > 面试题库 >

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

华季同
2023-03-14
问题内容

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

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

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

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


问题答案:

@feak给出了关于ApplicationContextSpring
含义的直接答案。简而言之,它是一个加载配置的对象(通常 基于 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配置的应用程序上下文。你能做这个吗?是的,您实际上在这里看到它。那有什么区别呢?的 主要
不同之处在于春豆单范围是singleton 每个应用程序的情况下
,这意味着检索时Bar是在applicationContext.xml文件配置为从豆context 也不会是相同
的,从检索它context2,但几个检索context将返回相同的Barbean实例

这是好事还是坏事? 两者都不 取决于要解决的问题(在最后一个示例的情况下,我会说这是一种 不好的
做法)。大多数人会建议将所有bean配置在一个位置(通过XML或另一个位置)并由单个应用程序上下文加载。



 类似资料:
  • 我已经通过安装插件准备了我的第一个vaadin应用程序,并创建了vaadin项目。构建成功并部署到wildFly后,尝试使用下面的localhost:port/myapp/和localhost:port//myapp/myuiservlet运行应用程序时也不起作用

  • 我多年来一直在使用Spring MVC,我试图理解与Spring Boot的一些关键区别。 你能帮我确认一下吗?或者让我明白我在这里遗漏了什么?

  • Spring Boot对于如何使用Spring构建应用程序有一个看法:例如它具有常规配置文件的常规位置,以及用于常见管理和监视任务的端点。Spring Cloud建立在此之上,并添加了一些可能系统中所有组件将使用或偶尔需要的功能。 引导应用程序上下文 一个Spring Cloud应用程序通过创建一个“引导”上下文来进行操作,这个上下文是主应用程序的父上下文。开箱即用,负责从外部源加载配置属性,还解

  • 问题内容: Spring框架中Application context和bean factory的简单词义。 问题答案: BeanFactory厂 该是初始化,配置实际的容器,并管理多个bean。这些bean通常彼此协作,因此彼此之间具有依赖性。这些依赖关系反映在所使用的配置数据中(尽管某些依赖关系可能不会作为配置数据可见,而是在运行时Bean之间的编程交互作用的函数)。 ApplicationCo

  • 问题内容: 有没有办法在Spring应用程序中静态/全局地请求ApplicationContext的副本? 假设主类启动并初始化了应用程序上下文,它是否需要通过调用堆栈将其向下传递给需要它的任何类,或者是否有一种方法可以让类要求先前创建的上下文?(我认为必须是单身人士?) 问题答案: 如果需要访问容器的对象是容器中的Bean,则只需实现BeanFactoryAware或ApplicationCon

  • 总线尝试从原始ApplicationEvent一次消除处理事件两次,一次从队列中消除。为此,它会检查发送应用程序上下文id,以重新显示当前的应用程序上下文ID。如果服务的多个实例具有相同的应用程序上下文id,则不会处理事件。在本地机器上运行,每个服务将在不同的端口上,这将是应用程序上下文ID的一部分。Cloud Foundry提供了区分的索引。要确保应用程序上下文ID是唯一的,请将spring.a

  • 问题内容: 关于这两个上下文的内容,已经有很多文章了。但是我仍然不太正确。 到目前为止,据我了解:每个实例都是其类的一个实例,这意味着某些程序员建议您尽可能频繁地使用它,以免“泄漏”任何内存。这是因为另一个this(获取Activity实例上下文)指向的Activity是每次用户倾斜手机或离开应用程序等时都将销毁的一个。显然,垃圾收集器(GC)无法捕获,因此使用了过多的内存。 .. 但是任何人都可

  • 问题内容: 问候 , 有什么方法可以将值从web.xml context-param转换为Spring上下文吗? 例如,我将web.xml中的值定义为: 我想将该值分配给bean属性为: 提前致谢? 问题答案: 是的- 本文介绍了详细信息。简而言之,您需要: 然后使用以下属性: 或搭配