欢迎访问我的 GitHub
-
文中涉及的 spring 版本号为 4.1.8.RELEASE;
BeanFactory 接口
-
在 spring 容器中,BeanFactory 接口是 IOC 容器要实现的最基础的接口,定义了管理 bean 的最基本的方法,例如获取实例、基本的判断等,如下图:
-
BeanFactory 有多个子接口来进一步扩展 bean 相关的功能,以下两个与本文有直接关系,需要关注:
-
HierarchicalBeanFactory:beanFactory 可以设置 ParentBeanFactory,这个接口的两个方法都是和 ParentBeanFactory 相关的,getParentBeanFactory 方法返回 ParentBeanFactory,containsLocalBean 方法是相对 containsBean 方法而言的,containsBean 方法找不到 bean 的时候会通过 ParentBeanFactory 去找,而 containsLocalBean 只在当前 beanFactory 找
ApplicationContext 接口
-
关于 ApplicationContext 和 BeanFactory 的关系,看类图即可一目了然:
-
原来 ApplicationContext 继承了 HierarchicalBeanFactory 和 ListableBeanFactory,也就是说前面看到的接口特性都被 ApplicationContext 继承下来了,另外通过类图可以发现,ApplicationContext 还继承了诸如 Environment、Resource、Message、Event
-
等相关的接口,也就是说 除了 bean 的管理配置相关的能力,ApplicationContext 还拥有了 Environment(环境)、MessageSource(国际化)、ResourceLoader(资源)、ApplicationEventPublisher(应用事件)等服务相关的接口,简单的说 ApplicationContext 是以 bean 管理为基础的综合能力扩展,用于满足业务对 Spring 综合能力的需要;
-
再看看 ApplicationContext 源码,除了继承,它自身也提供了一些扩展的能力:</