#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. Спасибо за ответ. Это привело бы к слишком большому количеству контроллеров, которые в значительной степени выполняют ту же задачу.