Автоматическое подключение множественной реализации абстрактного класса

#spring #spring-mvc

#spring #spring-mvc

Вопрос:

Я работал над структурой проекта spring MVC, в которой несколько конкретных классов обслуживания являются продолжением абстрактного класса.
введите описание изображения здесь

В моем контроллере я пытаюсь автоматически подключить абстрактный класс и выбрать реализацию, основанную на выборе пользователя. Вот соответствующая часть класса контроллера:

 @Controller
@RequestMapping("/")
public class DashboardController {
    @Autowired
    LogAnalyzerAbstract logAnalyzer;//new LogAnalyzer();
      private static final Log logger  =LogFactory.getLog(DashboardController.class);
 ....
logAnalyzer.process();
 }
  

Я хочу, чтобы контроллер использовал реализацию, основанную на пользовательском вводе, и использовал ссылку на абстрактный класс LogAnalyzer в дальнейшей реализации.

Верна ли моя логика? Ты можешь провести меня до конца?

Ответ №1:

Если я правильно понимаю, о чем вы спрашиваете, то вам нужно создать несколько контроллеров Spring-MVC, по одному для каждого варианта использования, со своим собственным базовым путем, и автоматически подключить туда абстрактный класс сервиса (или интерфейс сервиса) на основе имени компонента конкретной службы (если вы используете аннотацию @Service для конкретных классов служб, имя компонента должно быть именем конкретного класса сервиса, начинающегося со строчной буквы).

Например, что-то вроде следующего:

 @Service
public class MyFirstUseCaseService extends AbstractService {
...
} 
  

и в контроллере

 @Controller
@RequestMapping("/firstUseCaseBaseUrl")
MyFirstUseCaseController {

    @Autowired
    @Qualifier("myFirstUseCaseService")
    private AbstractService service;
....
}
  

Комментарии:

1. Спасибо за ответ. Это привело бы к слишком большому количеству контроллеров, которые в значительной степени выполняют ту же задачу.