上图是ApplicationContext的继承体系。
我们都知道在java里接口定义了功能,而ApplicationContext他集成了很多的接口,这说明他具备这些接口的功能,那么从这个图上我们可以很简单的得出接口,ApplicationContext和BeanFactory的关系是什么,ApplicationContext具备BeanFacory全部的功能,并且额外还具备其他更多的功能,比如资源的获取,事件的广播等。
现在我们来分别解释下图中各个接口的功能。
BeanFactory:bean工厂,spring容器里我们注册的bean都在这里面,包括xml注册和注解注册,我们可以通过该工厂提供的方法来获取这些bean。
ResourceLoader: 加载资源,比如xml文件和配置文件
ResourcePatternResolver:基础了ResourceLoader并且加强了获取资源的能力,通过通配符获取资源
MessageSource: 提供了多语言的支持
ApplicationEventPublisher:提供了事件发布的功能
EnvironmentCapable: 类型检查
HierarchicalBeanFactory:提供父容器的访问功能.至于父容器的设置,需要找ConfigurableBeanFactory的setParentBeanFactory(接口把设置跟获取给拆开了!).
ListableBeanFactory:判断工厂是否包括指定名字的bean的定义和获取bean定义的数量
这就是BeanFacory和ApplicationContext的区别。