Java:继承与依赖注入;“自动连线”;

Java:继承与依赖注入;“自动连线”;,java,spring,dependency-injection,Java,Spring,Dependency Injection,我使用的Spring框架通常采用普通的简单形式: 控制器服务存储库 我通常有一个公共服务,我把它放在CommonService类中,并使所有其他服务扩展类 一位开发人员告诉我,最好在每个服务中注入CommonClass,而不是使用继承 我的问题是,有一种方法比另一种更好吗?JVM或性能是否受一个因素的影响大于另一个因素的影响 更新 CommonService和其他服务之间没有直接的关系,它不是有-a或是-a关系,它就像一个实用服务。这是一个有利于组合而不是继承的原则。如果您从某个类继承,那么这两

我使用的Spring框架通常采用普通的简单形式:

控制器服务存储库

我通常有一个公共服务,我把它放在
CommonService
类中,并使所有其他服务扩展类

一位开发人员告诉我,最好在每个服务中注入
CommonClass
,而不是使用继承

我的问题是,有一种方法比另一种更好吗?JVM或性能是否受一个因素的影响大于另一个因素的影响

更新


CommonService
和其他服务之间没有直接的关系,它不是有-a是-a关系,它就像一个实用服务。

这是一个有利于组合而不是继承的原则。如果您从某个类继承,那么这两个类都是紧密耦合的,因此很难将不同的东西分开

除非两者之间存在
is实体
关系,否则最好建模
uses实体
关系,因为这样以后可以更容易地进行更改


当然,这取决于用例,它更多的是一个设计和架构问题,而不是性能方面。

依赖项注入允许您在不更改代码的情况下交换
CommonService
。例如测试。但一般来说,当有人告诉你他们的方式更好时,请他们解释原因。这是否回答了你的问题@Thilo,谢谢您的回复,我并没有要求解释,因为这是一次短暂的会议。@Tarmo,我会检查一下。您应该“接受”这个答案。下面是一个例子,说明存在
is-a
关系。每个有问题的
服务
都是一个公共服务
,如果说每个
公共服务
都依赖于
X
Y
Z
来做
a
B
C
,我认为提取
X
Y
没有任何好处,和
Z
进入一个单独的可注入系统,只是为了摆脱继承。@M.Prokhorov,是的,这正是你所说的,因此最终还是要由开发人员来决定什么更好,根据我目前的理解,我将继续使用继承:)@ebraheemallabee,如果
CommonService
所需的一切都是单个服务的实现细节,那么他的建议可能是有道理的。也就是说,如果
CommonService
没有公共API。
CommonSerivce
没有公共API,那么它只是一种实现方法,使用不同的存储库执行一项任务,其他方法在用户提交到API后工作(例如,从请求头提取一些数据)。