@Yasuro

Как параметризовать bean springBoot на лету?

Есть компонент:
@Component
public class Provider<EntityType> extends AbstractProvider<EntityType> {
    @Autowired
    private ApplicationContext appCxt;

    MyService<EntityType> myService;
}

Мне надо параметризовать MyService в зависимости от запроса с фронтенда. Т.е MyService инициализировать одним из дочерних классов. Дочерних классов много, всех их автоварить не хочется, по этому тут есть ApplicationContext из которого, по имени мы получаем нужный дочерний объект:
public void initService(Class clazz) {
        final String entityClassName = clazz.getName();

        if (MyObjectService.class.getName.equals(entityClassName)){
            this.myService= appCxt.getBean(MyObjectService.class);
        }

Сейчас я работаю с этим API извне так:
1)автоварю Provider
2) По запросу с фронта узнаю какой именно сервис нужен.
3)вызываю у Provider метод initService(), в который передаю нужный дочерний класс

Мне надо, чтобы третьего шага не было. Вместо этого, хочется, чтобы пользователь апи получал из контекста ( appCxt.getBean(Provider.class) ) уже бин с инициализированным service. Вопрос, как это реализовать?
  • Вопрос задан
  • 54 просмотра
Пригласить эксперта
Ответы на вопрос 1
1. Таки сделать все возможные бины для MyService. Т.е. создать имплементации всех сервисов. Можно через xml или config class

2. Инжектить как List myServices

3. Искать в myServices нужную вам имплементацию
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы