一、顶级Factory-BeanFactory:是所有Factory的父级,是spring 的核心,spring IOC容器通过BeanFactory创建、管理Bean。提供了用于访问Spring IoC容器的根接口。其子类包括:ApplicationContext,AutowireCapableBeanFactory,ConfigurableApplicationContext,ConfigurableBeanFactory,ConfigurableListableBeanFactory,ConfigurableWebApplicationContext,HierarchicalBeanFactory,ListableBeanFactory,WebApplicationContext。提供了对Bean的一些基本操作包括:getBean(),containsBean()等,最常被使用的是 XmlBeanFactory。BeanFacoty启动时占用资源少,对资料要求比较高的应用首选。
二、ApplicationContext:是BeanFactory的派生,提供了基于应用程序上下文环境去实现BeanFactory中的功能。常用接口包括
-
FileSystemXmlApplicationContext:该容器从 XML 文件中加载已被定义的 bean。在这里,你需要提供给构造器 XML 文件的完整路径。
-
ClassPathXmlApplicationContext:该容器从 XML 文件中加载已被定义的 bean。在这里,你不需要提供 XML 文件的完整路径,只需正确配置 CLASSPATH 环境变量即可,因为,容器会从 CLASSPATH 中搜索 bean 配置文件。
- WebXmlApplicationContext:该容器会在一个 web 应用程序的范围内加载在 XML 文件中已被定义的 bean
ApplicationContext提供:
- Bean工厂方法,用于访问应用程序组件 继承自
ListableBeanFactory
。 - 以通用方式加载文件资源的能力。继承自
ResourceLoader
接口。 - 将事件发布到已注册的侦听器的功能。继承自
ApplicationEventPublisher
接口。 - 解决消息,支持国际化的能力。继承自
MessageSource
接口。 - 从父上下文继承。后代上下文中的定义始终优先。这意味着,例如,整个Web应用程序可以使用单个父上下文,而每个servlet都有自己的子上下文,该上下文独立于任何其他servlet的子上下文。
除了标准的BeanFactory
生命周期的能力,ApplicationContext实现检测和调用 ApplicationContextAware
豆类以及ResourceLoaderAware
, ApplicationEventPublisherAware
和MessageSourceAware ----参考来源
BeanFactory和ApplicationContext区别:
BeanFactory:提供了对容器的最基本实现,创建bean、获取bean。只是获取bean的时候才进行实例化,启动时并不参与实例化,占用资源少,对资源要求高的应用应当首选。
ApplicationContext:提供了对容器的基本实现之外还提供了其它的机制。在启动容器时便实例化bean(声明了延迟加载除外)