在Spring框架中,上下文(Context)是一个非常重要的概念,它代表了Spring应用的核心,用于管理应用程序中的bean(组件)的生命周期,配置信息等。Spring框架提供了多种类型的上下文实现,其中最常用的是ApplicationContext接口及其实现类。

ApplicationContext

ApplicationContext是Spring框架中的核心接口,它继承自BeanFactory接口,提供了更丰富的功能。ApplicationContext不仅管理bean的创建和依赖注入,还提供了其他高级功能,如国际化和资源加载等。

ApplicationContext的实现类

  1. ClassPathXmlApplicationContext:从类路径下的XML文件中加载配置文件。

    1
    ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
  2. FileSystemXmlApplicationContext:从文件系统中的XML文件中加载配置文件

    1
    ApplicationContext context = new FileSystemXmlApplicationContext("path/to/applicationContext.xml");
  3. AnnotationConfigApplicationContext:用于加载基于Java的配置类(使用@Configuration注解的类)。

    1
    ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
  4. XmlWebApplicationContext:专门为Web应用设计的ApplicationContext实现,用于加载Web应用的XML配置文件。

  5. AnnotationConfigWebApplicationContext:用于Web应用,加载基于Java的配置类。

使用ApplicationContext

  1. 加载配置文件或类

    • XML配置:通过ClassPathXmlApplicationContextFileSystemXmlApplicationContext加载XML配置文件。

    • Java配置:通过AnnotationConfigApplicationContext加载使用@Configuration注解的类。

  2. 获取Bean

    一旦上下文被创建,你可以通过它来获取需要的bean或者使用名称:。例如:

    1
    2
    MyBean myBean = context.getBean(MyBean.class); // 获取bean
    MyBean myBean = (MyBean) context.getBean("myBean"); // 获取使用名称
  3. 关闭上下文

    当Spring应用结束时,应该关闭上下文以释放资源或者使用自动关闭:

    1
    2
    ((ConfigurableApplicationContext) context).close(); // 关闭上下文
    ((AbstractApplicationContext) context).registerShutdownHook(); // 注册JVM关闭钩子,自动关闭上下文

高级功能

  • 国际化:通过MessageSource获取本地化消息。
  • 事件发布:发布和监听应用事件。
  • 资源管理:加载文件资源,如属性文件、XML文件等。
  • 环境抽象:提供对不同环境的抽象,如开发、测试、生产等。