ApplicationContext 源码

ApplicationContext 是 Spring 框架中的一个重要接口,它是 Spring 应用上下文的顶级接口。

ApplicationContext 提供了以下功能:

  • 管理应用程序中的所有 bean,包括它们的生命周期和依赖关系。

  • 读取配置文件,并根据配置创建和配置 bean。

  • 自动装配 bean 之间的依赖关系。

  • 提供事件发布和事件订阅功能。

  • 支持国际化。
public interface ApplicationContext extends EnvironmentCapable, ListableBeanFactory, HierarchicalBeanFactory, MessageSource, ApplicationEventPublisher, ResourcePatternResolver {
  ...
}

可以看到,ApplicationContext 接口继承了多个接口,这些接口提供了 ApplicationContext 的各种功能。

例如,

  • EnvironmentCapable 提供了用于访问和操作应用程序的运行环境,
  • ListableBeanFactory 提供了管理 bean 的功能,
  • HierarchicalBeanFactory 提供了管理 bean 之间的继承关系的功能,
  • MessageSource 提供了国际化消息的功能,
  • ApplicationEventPublisher 提供了事件发布和订阅的功能,
  • ResourcePatternResolver 提供了读取资源文件的功能等。

通过 ApplicationContext 接口,可以方便地访问 Spring 应用上下文的各种功能。

ApplicationContext 的一些重要方法:

  • getBean(String name):根据名称获取 bean。

  • getBean(Class<T> requiredType):根据类型获取 bean。

  • getBean(String name, Class<T> requiredType):根据名称和类型获取 bean。

  • getBeansOfType(Class<T> type):根据类型获取所有的 bean。

  • getBeanNamesForType(Class<T> type):根据类型获取所有的 bean 的名称。

  • getAutowireCapableBeanFactory():获取自动装配 bean 的工厂。

  • getMessage(String code, Object[] args, String defaultMessage, Locale locale):根据消息码和国家地区获取消息。

  • getMessage(String code, Object[] args, Locale locale) throws NoSuchMessageException:根据消息码和国家地区获取消息。

  • publishEvent(ApplicationEvent event):发布事件。

这些方法是 ApplicationContext 接口中的一些常用方法,它们提供了访问 Spring 应用上下文的各种功能的入口。

 

常用的 ApplicationContext 实现类:

  • AnnotationConfigApplicationContext:基于注解的应用上下文,可以通过注解来定义和管理 bean。

  • ClassPathXmlApplicationContext:基于 XML 配置文件的应用上下文,可以通过 XML 配置文件来定义和管理 bean。

  • FileSystemXmlApplicationContext:基于 XML 配置文件的应用上下文,可以加载本地文件系统中的 XML 配置文件来定义和管理 bean。

  • WebApplicationContext:基于 Web 环境的应用上下文,专门用于 Web 应用。

这些 ApplicationContext 实现类都实现了 ApplicationContext 接口,并提供了访问 Spring 应用上下文的各种功能。根据应用的需要,可以选择合适的 ApplicationContext 实现类。

此外,Spring 还提供了一个抽象类 AbstractApplicationContext,它是 ApplicationContext 接口的一个抽象实现,可以作为其他 ApplicationContext 实现类的基类。

通过 ApplicationContext 和其实现类,可以方便地管理 Spring 应用中的 bean 和它们的依赖关系,并提供了各种功能来支持应用的开发。

 

通过 ApplicationContext 来管理 bean:

例如,可以通过以下代码来获取 ApplicationContext 对象:

ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");

可以通过以下代码来获取 bean:

MyBean bean = context.getBean("myBean", MyBean.class);

也可以通过以下代码来获取所有的 bean:

Map<String, MyBean> beans = context.getBeansOfType(MyBean.class);

通过 ApplicationContext 来发布和订阅事件:

例如,可以通过以下代码来发布事件:

context.publishEvent(new MyEvent(this));

然后,可以通过以下代码来定义事件监听器:

@Component
public class MyEventListener implements ApplicationListener<MyEvent> {
  public void onApplicationEvent(MyEvent event) {
    // 处理事件
  }
}

当事件发布时,Spring 会自动调用事件监听器的 onApplicationEvent 方法,处理事件。

通过 ApplicationContext 和事件机制,可以在 Spring 应用中实现事件驱动的设计模式,使得应用能够响应外部事件并作出相应的反应。

此外,Spring 还提供了一个抽象类 AbstractApplicationEventMulticaster,可以作为事件多播器的基类。通过实现这个抽象类,可以自定义事件多播器的实现方式。

 

posted @ 2022-12-27 15:40  shuangman  阅读(29)  评论(0)    收藏  举报