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)