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则是自动注册。