Spring中的ApplicationContext

1、ApplicationContext应用程序上下文

ApplicationContext是最常用的Spring ioc容器,他实现了很多接口:

  • BeanFactory:Spring 管理 Bean 的顶层接口,我们可以认为他是一个简易版的 Spring 容器。
  • ApplicationEventPublisher:用于封装事件发布功能的接口,向事件监听器(Listener)发送事件消息。
  • ResourceLoader:Spring 加载资源的顶层接口,用于从一个源加载资源文件。ApplicationContext 继承 ResourceLoader 的子类 ResourcePatternResolver,该接口是将 location 解析为 Resource 对象的策略接口。
  • MessageSource:解析 message 的策略接口,用不支撑国际化等功能。
  • EnvironmentCapable:用于获取 Environment 的接口。

在这里插入图片描述

2、常用实现类

常用实现类也就是我们常用的容器:

AnnotationConfigApplicationContext:通过配置类加载容器。
ClassPathXmlApplicationContext :从class中加载xml配置容器
FileSystemXmlApplicationContext:从文件系统中加载配置容器

还有和web服务相关的容器:如XmlWebApplicationContext,看几个静态属性,很眼熟吧,SpringMvC

public class XmlWebApplicationContext extends AbstractRefreshableWebApplicationContext {
    public static final String DEFAULT_CONFIG_LOCATION = "/WEB-INF/applicationContext.xml";
    public static final String DEFAULT_CONFIG_LOCATION_PREFIX = "/WEB-INF/";
    public static final String DEFAULT_CONFIG_LOCATION_SUFFIX = ".xml";

    ......
}

还有其他子类:

AnnotationConfigWebApplicationContext :注解配置Web项目,新的SpringMVC使用可以去除其他如web.xml

3、BeanFactary和ApplicationContext的区别

beanFactory在对bean加载时是即用即加载。

ApplicationContext则是在加载的时候,统一实例化所有Bean(懒加载、原型、抽象除外),在容器启动时,一次性创建了所有的Bean。这样,在容器启动时,我们就可以发现Spring中存在的配置错误。
BeanFactory和ApplicationContext都支持BeanPostProcessor、BeanFactoryPostProcessor的使用,但两者之间的区别是:BeanFactory需要手动注册,而ApplicationContext则是自动注册。

posted @ 2020-10-17 09:13  cgl_dong  阅读(362)  评论(0编辑  收藏  举报