应用背景。 这是什么?

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

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

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

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

@feak根据Spring给出了关于ApplicationContext含义的直接答案。 简而言之,正是加载配置的上下文(通常是XML文件)然后Spring将开始管理bean及其好处:

  • 豆类在包装中宣布
  • 注释声明的Bean(如果启用此配置)
  • Bean和方法自动assembly
  • 豆注射
  • 配置,.properties文件加载
  • 等等

要启动应用程序上下文,您可以使用以下某个选项:

  • 在应用程序开始时手动加载应用程序上下文。 这样做是为了样本目的或在独立应用程序中完成的:

     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或不基于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或其他)并由单个应用程序上下文加载。

我想你的同事意味着加载的spring应用程序上下文,它允许访问:

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