应用背景。这是什么?

时间:2013-10-27 08:14:50

标签: java spring spring-mvc configuration config

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

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

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

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

3 个答案:

答案 0 :(得分:23)

@feak就Spring的含义给出了关于ApplicationContext含义的直接答案。简而言之,它是一个加载配置的对象(通常基于 XML文件注释),然后Spring将开始管理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将为您加载应用程序上下文,因此您只需创建 springapp-servlet.xml 文件在应用程序的WEB-INF文件夹中。

请注意,应用程序上下文与单个配置相关联(基于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单例作用域是单个每个应用程序上下文,这意味着从{{检索applicationContext.xml文件中配置的Bar bean时1}} 与从context检索不一样,但是从context2检索的几个将返回相同的context bean实例。

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

答案 1 :(得分:1)

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

  • 应用程序的配置,
  • 初始化bean,
  • 申请活动api,

答案 2 :(得分:1)

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

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

它提供了我们的应用程序所需的大量配置-

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

enter image description here

概括地说,我们可以说 Application contex t是为应用程序运行而创建的Configuration对象。

applicationContext.xml 定义了“根webapp上下文”的bean。它具有网络感知的ApplicationContext。

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

我希望这会有所帮助。