Этот вопрос предназначен для ответа на полезную проблему.Как использовать динамическую реализацию интерфейса весной?
Предположим, у нас есть приложение Spring с @Controller, интерфейс и различные реализации этого интерфейса.
Мы хотим, чтобы @Controller использовал интерфейс с надлежащей реализацией на основе запроса, который мы получаем.
Вот @Controller:
@Controller
public class SampleController {
@RequestMapping(path = "/path/{service}", method = RequestMethod.GET)
public void method(@PathVariable("service") String service){
// here we have to use the right implementation of the interface
}
}
Вот интерфейс:
public interface SampleInterface {
public void sampleMethod(); // a sample method
}
Вот один из реализации possibile:
public class SampleInterfaceImpl implements SampleInterface {
public void sampleMethod() {
// ...
}
}
А вот еще один:
Вот один из реализации possibile:
public class SampleInterfaceOtherImpl implements SampleInterface {
public void sampleMethod() {
// ...
}
}
Ниже я покажу решение, которое я нашел, чтобы использовать один из реализаций динамически на основании запроса.
Аргумент 'String service' метода имеет значение ** Basic ** или ** Other ** во время выполнения? Вы говорите, что вызывающий Службой должен передать ** Basic ** или ** Other ** при вызове? – STaefi
Да, в этом случае служебная переменная имеет одно из этих значений. Но вы всегда можете сделать чек раньше. –
Хотя для Caller of the service почему-то странно знать об этих константах, всю идею можно манипулировать продуктивным образом. +1 для вашей документации. – STaefi