spring-cloud / spring-cloud-openfeign

Support for using OpenFeign in Spring Cloud apps
Apache License 2.0
1.22k stars 786 forks source link

WIP: Open Feign must support multiple interface inheritance #413

Open silkentrance opened 4 years ago

silkentrance commented 4 years ago

WIP Notice

I am currently working on this feature request across multiple repositories, so this this will be updated multiple times. Once finished, this notice will be removed. As soon as this notice gets removed, there will be a PR for spring-cloud-openfeign.

Problem

The current problem with OpenFeign is that one cannot inherit from multiple interfaces. And while the current contract,, i.e. single inheritance of annotated interfaces, should be supported in a backward compatitble way, I see no reason why one should prevent the user to inherit from multiple interfaces or marker interfaces even, and recursively so.

Describe the solution you'd like

Feign client interfaces should support multi-level, multiple inheritance.

Describe alternatives you've considered

There are no alternatives unless you come up with a better solution to the problem.

Additional context

I am currently working on a PR for the open feign project to incorporate such measures, meaning that the Contract.BaseContract functionality will be extended so that the IMO artificial restriction on inheritance will be removed altogether.

This will require no changes to spring-cloud except for updating the openfeign dependency.

OlgaMaciaszek commented 4 years ago

Thanks, @silkentrance. We will need to see what happens with the issue and PR in Feign core first. Please comment here once the PR has been merged there.

silkentrance commented 4 years ago

@OlgaMaciaszek Thank you for the reply. I was already convinced that due to the ongoing pandemic, all work had been cancelled.

OlgaMaciaszek commented 4 years ago

No, @silkentrance we just have a small team maintaining a big number of projects. The OpenFeign team is independent from us, though, so first let's see what happens with the changes you've submitted in that repo.