静守时光 2013-09-23 21:33
浏览 286
已采纳

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

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

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

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

  • 写回答

1条回答 默认 最新

  • zhujihuaalice 2013-09-24 10:03
    关注

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 MapReduce结果输出到HBase,一直连接不上MySQL
  • ¥15 扩散模型sd.webui使用时报错“Nonetype”
  • ¥15 stm32流水灯+呼吸灯+外部中断按键
  • ¥15 将二维数组,按照假设的规定,如0/1/0 == "4",把对应列位置写成一个字符并打印输出该字符
  • ¥15 NX MCD仿真与博途通讯不了啥情况
  • ¥15 win11家庭中文版安装docker遇到Hyper-V启用失败解决办法整理
  • ¥15 gradio的web端页面格式不对的问题
  • ¥15 求大家看看Nonce如何配置
  • ¥15 Matlab怎么求解含参的二重积分?
  • ¥15 苹果手机突然连不上wifi了?