Как получить функциональность @Autowired JpaRepository по его классу - PullRequest
0 голосов
/ 07 апреля 2019

В моем весеннем загрузочном приложении у меня есть класс 'repo', который находится по имени класса

Class<?> repo = Class.forName("com.example.demo.repository." + modelName + "Repository");

, где modelName - строка.

repo.toString () возвращает

interface com.example.demo.repository.LaptopRepository

Я хочу иметь возможность использовать методы laptopRepository.findAll ().Я точно не знаю, какая модель у меня будет.Поэтому я не смог использовать аннотацию @Autowired вне метода.

Вместо этого я хочу использовать laptopRepository внутри метода, который принимает атрибут modelName.

@GetMapping("/administration")
public String getModelInstances(@RequestParam("modelName")String modelName, Model model) throws ClassNotFoundException {
    Class<?> repo = Class.forName("com.example.demo.repository." + modelName + "Repository");

    // @Autowired
    // repo repoRepository;

    model.addAttribute("objects", repoRepositories.findAll());
    return "administration";
}

1 Ответ

0 голосов
/ 07 апреля 2019

Просто используйте контекст приложения Sping, чтобы получить требуемый компонент репозитория по его типу.

1) Автопровода контекста в вашем контроллере

@Autowired
private ApplicationContext appContext;

2) Используйте его в своем методе

appContext.getBean(Class.forName("com.example.demo.repository." + modelName + "Repository"));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...