首先我们说下抽象类和接口的区别。从面向对象的设计理念来看,抽象类是is-a的关系,即子类是父类的一种实现;而接口是行为的集合,即某类应该具有哪些行为,则实现相应的接口,类似“has-a”的关系。
但Spring的IOC容器的核心BeanFactory,是具有最基本功能的工厂容器,其所有的子接口和子类如ApplicationContext、FileSystemXmlApplicationContext则是有各种各样功能的工厂容器,和BeanFactory应该是Is-a的关系,所以对BeanFactory及其容器子接口应该是抽象类来实现,而不是接口。
但为什么Spring设计者把它们设计为接口呢?