Java Maven项目组织:一个接口多个实现

Java Maven项目组织:一个接口多个实现,java,maven,dependency-injection,interface,Java,Maven,Dependency Injection,Interface,假设我有一个类Person。此类依赖于名为MessagingService的服务;一个带有一种方法的接口sendMessage(String msg)。现在有三个类实现了这个接口: (1) EmailMessagingService (2) TextMessagingService (3) VoiceMessagingService (将来可能会有更多的实现) Person、EmailMessagingService、TextMessagingService和VoiceMessagingServ

假设我有一个类
Person
。此类依赖于名为
MessagingService
的服务;一个带有一种方法的接口
sendMessage(String msg)
。现在有三个类实现了这个接口:
(1)
EmailMessagingService

(2)
TextMessagingService

(3)
VoiceMessagingService

(将来可能会有更多的实现)

Person、EmailMessagingService、TextMessagingService和VoiceMessagingService都由不同的团队拥有,都是独立的maven项目和独立的git回购

问题:

(1) 如何使用界面
MessagingService
?这是否应该是一个单独的maven项目和git回购项目,以便所有四个项目:
Person
EmailMessagingService
TextMessagingService
VoiceMessagingService
都依赖于它?或者它可以/应该是
人员
项目的一部分

(2) 如果它可以是
Person
项目的一部分,那么如何仅依靠接口
MessagingService
就可以实现这三个实施项目。
MessagingService
即使是
Person
项目的一部分,它仍然可以是一个单独的工件吗

(3) 我想要一个
Person
的实例与每个实现打包在一起,并在生产中单独运行它。因此,
Person
的一个实例使用了
EmailMessagingService
。第二个
Person
实例使用
TextMessagingService
。第三个实例使用
VoiceMessagingService
。这样包装
Person
最好的方法是什么?我是否应该让
人员
依赖这三个项目?我可以拥有它吗,这样
Person
就不依赖于任何实现类了?

Well ad 1):

我将创建一个类似于“commons”的项目,其中包含您的
MessagingService
接口。所有其他4个项目(Person+您的3个实现)都将此commons项目作为Maven依赖项包括在内。Person还将这3个实现作为依赖项包括在内

关于你的第一个问题,见我的答案。这是同样的原则

广告3)我不确定您使用的是哪种DI。您可以向所有3个服务注入它们的限定符。然后在创建Person对象时,设置所有3个服务(通过构造函数或setter)