Feign 接口的多态

2023-04-08 10:29:47 浏览数 (2)

接口多态

在Feign中,接口多态可以让我们通过一个接口的引用来调用不同的实现类,从而提高代码的灵活性和可扩展性。

例如,我们有一个支付服务接口,它有多种支付方式,我们可以使用接口多态来实现这些支付方式的调用。

定义接口

首先,我们需要定义一个支付服务接口,其中包含了多种支付方式的方法。

代码语言:javascript复制
public interface PaymentService {
    @PostMapping("/pay")
    PaymentResponse pay(@RequestBody PaymentRequest request);
}

public class PaymentRequest {
    private String paymentType;
    private Double amount;
    //...
}

public class PaymentResponse {
    private String status;
    private String message;
    //...
}

在上面的示例中,我们定义了一个名为PaymentService的接口,其中包含了支付方法pay,并定义了请求参数PaymentRequest和响应参数PaymentResponse。

实现接口

接下来,我们可以实现支付服务接口,针对不同的支付方式提供不同的实现。

代码语言:javascript复制
@FeignClient(name = "alipay-service")
public interface AlipayService extends PaymentService {
}

@FeignClient(name = "wechatpay-service")
public interface WechatpayService extends PaymentService {
}

在上面的示例中,我们分别定义了支付宝支付服务和微信支付服务,它们都实现了PaymentService接口,从而可以使用接口多态来调用不同的支付方式。

使用接口多态

最后,我们可以使用接口多态来调用不同的支付方式,例如:

代码语言:javascript复制
public class PaymentController {
    private PaymentService paymentService;

    public PaymentController(PaymentService paymentService) {
        this.paymentService = paymentService;
    }

    @PostMapping("/pay")
    public PaymentResponse pay(@RequestBody PaymentRequest request) {
        return paymentService.pay(request);
    }
}

@RestController
public class AlipayController {
    private PaymentController paymentController;

    public AlipayController(AlipayService alipayService) {
        paymentController = new PaymentController(alipayService);
    }

    @PostMapping("/alipay/pay")
    public PaymentResponse pay(@RequestBody PaymentRequest request) {
        return paymentController.pay(request);
    }
}

@RestController
public class WechatpayController {
    private PaymentController paymentController;

    public WechatpayController(WechatpayService wechatpayService) {
        paymentController = new PaymentController(wechatpayService);
    }

    @PostMapping("/wechatpay/pay")
    public PaymentResponse pay(@RequestBody PaymentRequest request) {
        return paymentController.pay(request);
    }
}

在上面的示例中,我们定义了一个名为PaymentController的控制器,它接收一个PaymentService接口的实现类,并提供了一个名为pay的方法来调用支付服务。

然后,我们分别定义了支付宝控制器和微信支付控制器,并将它们的构造函数注入了AlipayService和WechatpayService接口的实现类,从而使用接口多态来调用不同的支付方式。

0 人点赞