关于Spring的BeanFacotry及子类,以接口方式却不采用抽象类的疑问

    首先我们说下抽象类和接口的区别。从面向对象的设计理念来看,抽象类是is-a的关系,即子类是父类的一种实现;而接口是行为的集合,即某类应该具有哪些行为,则实现相应的接口,类似“has-a”的关系。

    但Spring的IOC容器的核心BeanFactory,是具有最基本功能的工厂容器,其所有的子接口和子类如ApplicationContext、FileSystemXmlApplicationContext则是有各种各样功能的工厂容器,和BeanFactory应该是Is-a的关系,所以对BeanFactory及其容器子接口应该是抽象类来实现,而不是接口。

    但为什么Spring设计者把它们设计为接口呢?

0

1个回答

首先我觉得像spring这样的庞大的开源框架的设计理念,并不会完全遵守,一些常用的准则,肯定有自己独到之处,java中不支持继承多个抽象类,却支持接口的继承和扩展,这样,对于一个接口有若干继承接口,在java中就是很正常的事情,就像spring中beanfactory有很多的继承接口,这些接口大多数面向不同的环境,不同的使用场景,就相当于把spring核心容器接口提供的功能,通过定义不同接口的方式来做了汇总归类,降低了使用接口的复杂度,我所知道的spring中有相当部分的属于接口方法,但是却不适合向普通用户公开,这样,通过一个子接口就隐藏了这部分接口代码,同时又符合面向接口的设计。

0
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!