我有两个控制器(ControllerA和ControllerB)
两个控制器都调用服务(MyService)。
MyService调用名为MyRepository的接口,该接口具有两个实现(FirstRepository和SecondRepository)。
从ControllerA调用服务(MyService)时如何使用FirstRepository,而从ControllerB调用时使用SecondRepository?
这样我可以重用MyService,并且使用哪个存储库来自Spring Configuration。
我可以在这里看到两种可能的解决方案。1.在MyService类中,使用@Qualifier
注释自动装配两个实现(也可以自动装配List。然后,MyService方法将具有一个参数,该参数指示应调用哪个MyRepository实现。我不推荐这种解决方案。2.定义MyService的两个实现(FirstService,SecondService)。然后,FirstService将自动连接FirstRepository,而SecondService将自动连接SecondRepository(使用@Qualifier annotation again
。现在您可以轻松地将FirstService注入ControllerA,将SecondService注入ControllerB。
但是首先,我会考虑架构。也许您不需要单独的控制器?
您是否已检查@Primary或@Resource或@Qualifier注释?根据您的要求,您可以从中选择。
已经讨论过类似的事情here。