Как безопасно иметь класс @RestController, реализующий интерфейс, аннотированный с помощью @FeignClient

Учитывая следующий пример кода

-- код клиентской библиотеки

@FeignClient("string-service")
public interface StringClient {

     @RequestMapping(method = RequestMethod.GET, value = "/microservicestring")
      public String home();
}


@Service
public class StringHystrixClient {

    private final SpringClient springClient;
//....

}

-- код сервисной библиотеки

@RestController
public class StringController implements StringClient {
    public String home(){
         return "World";
    }
}


@SpringBootApplication
@EnableHystrix
@EnableEurekaClient
@EnableFeignClients
public class StringApplication { ....}

Если сервисная библиотека ссылается на клиентскую библиотеку, то при запуске приложения через сканирование компонентов мы попадем в состояние, когда при заполнении зависимостей из StringHystrixClient контейнер Spring не будет знать, что делать, потому что есть два bean-компонента, реализующих StringClient.

Одним из решений, чтобы избежать этого, было бы не реализовывать StringClient в StringController, но дублирование кода из интерфейса и остального контроллера было бы подвержено ошибкам. Может ли кто-нибудь указать более элегантное решение этой проблемы?


person marius_neo    schedule 08.07.2015    source источник
comment
Я вижу вопрос, очень похожий на этот: stackoverflow.com/questions/29284911/   -  person marius_neo    schedule 08.07.2015
comment
почему контроллер в зависимостях клиентов? Вероятно, вам следует распространять @FeignClient только среди клиентов.   -  person spencergibb    schedule 08.07.2015
comment
Я ошибаюсь, вы ссылаетесь на клиента с сервера. Можно ли исключить FeignClient из сканирования компонентов? Или не включать его в сервер?   -  person spencergibb    schedule 08.07.2015
comment
Да, сканирование компонентов может исключить @FeignClient, но это не идеально (в случае, если несколько экземпляров @FeignClient совместно используют один и тот же пакет в разных проектах, и некоторые из них необходимы в качестве зависимостей StringApplication).   -  person marius_neo    schedule 15.07.2015