【问题标题】:Spring Boot - Override bean from controllerSpring Boot - 从控制器覆盖 bean
【发布时间】:2020-06-21 10:57:36
【问题描述】:
  1. 我有两个控制器(ControllerAControllerB

  2. 两个控制器都调用服务 (MyService)。

  3. MyService 调用一个名为 MyRepository 的接口,该接口有两个实现(FirstRepositorySecondRepository) .

ControllerA 调用服务 (MyService) 并使用 SecondRepository 时如何使用 FirstRepository当调用来自 ControllerB

这样我可以重用MyService,使用的存储库来自Spring Configuration。

【问题讨论】:

  • 从概念上讲,您有两种服务,而不是一种。有一个基类(可能是抽象的)MyService 和两个子类 MyService1 和 MyService2,它们分别自动装配 FirstRepository 和 SecondRepository。这些服务分别自动连接到 ControllerA 和 B。

标签: spring spring-boot javabeans spring-bean


【解决方案1】:

我最终创建了两个控制器并定义了两个@Configuration 类,每个@Controller 一个。

并使用@Qualifier注解定义了两组bean,然后在每个控制器中让Spring知道我要注入哪个@Qualified bean。

@RestController
@RequestMapping("/v1/inapp/purchases")
class AController(
  @Qualifier("appStore") private val redeemPurchaseService: RedeemPurchaseService
) : RedeemPurchaseApiDocumentation { // More code }

还有另一个控制器

@RestController
@RequestMapping("/v1/inapp/purchases")
class GPlayRedeemPurchaseController(
  @Qualifier("gplay") private val redeemPurchaseService: RedeemPurchaseService
) : RedeemPurchaseApiDocumentation { // More code }

还有两个@Configuration 文件,每个控制器一个。

【讨论】:

    【解决方案2】:

    您检查过@Primary@Resource@Qualifier 注释吗?根据您的要求,您可以从中选择。

    已经讨论过类似的事情here

    【讨论】:

    • 检查了这些注释,但不适用于我的用例:-/
    • 我对答案感到困惑,您试图在同一个 api URL 上映射两个控制器?
    • 在每个控制器内部都有一个带有不同 /path 的方法,但没有包括在内以保持示例简短。也许我应该添加它..
    【解决方案3】:

    我可以在这里看到两种可能的解决方案。 1. 在您的 MyService 类中,使用 @Qualifier 注释自动装配两个实现(您也可以自动装配 List. 然后 MyService 方法将有一个参数说明应该调用哪个 MyRepository 实现。我不会推荐这个解决方案。 2.定义MyService的两个实现(FirstService、SecondService)。然后 FirstService 将自动连接 FirstRepository,SecondService 将自动连接 SecondRepository(使用@Qualifier annotation again。现在您可以轻松地将 FirstService 注入 ControllerA 并将 SecondService 注入 ControllerB。

    但首先我会考虑建筑。也许您不需要单独的控制器?

    【讨论】:

    • 谢谢@standy,你给了我这个主意!
    猜你喜欢
    • 1970-01-01
    • 2020-04-09
    • 2019-04-07
    • 2019-04-05
    • 1970-01-01
    • 2016-12-12
    • 2015-05-01
    • 1970-01-01
    • 2020-08-07
    相关资源
    最近更新 更多