首先 BeanFactory 作为根接口,有最基本的三个派生接口,按照单一职责原则,分别为: AutowireCapableBeanFactory / ListableBeanFactory / HierarchicalBeanFactory ,每个负责 BeanFactory 一个方面的增强。
但是生成 UML 之后发现,继承了所有三个接口的接口是 ConfigurableListableBeanFactory(这命名也是奇怪,明明继承了 3 个,为什么名称里只有 2 个?),而真正实现了所有这三个接口的是 DefaultListableBeanFactory(这个命名也很奇怪) , XmlBeanFactory 就是继承自它。
但是还有另外一个最重要的 ApplicationContext ,它其实是在 BeanFactory 的基础上加了比如 Event / Resource / i18n 等。但是它并没有实现 AutowireCapableBeanFactory (也没有间接实现)。
为什么会有这两条线路呢?既然 ApplicationContext 就可以用了,为啥还要 xmlBeanFactory 呢?为什么 ApplicationContext 不把所有的接口都实现了呢?