如何通过其类获取@Autowired JpaRepository的功能

时间:2019-04-07 10:56:23

标签: java hibernate spring-boot

在我的Spring Boot应用程序中,有一个通过其类名找到的类'repo'

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

其中modelName是一个字符串。

repo.toString()返回

interface com.example.demo.repository.LaptopRepository

我希望有能力使用laptopRepository.findAll()方法。 我完全不知道我将拥有哪个modelName。 所以我不能在方法外使用@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 :(得分:0)

只需使用Sping应用程序上下文按其类型获取所需的存储库bean。

1)在控制器中自动关联上下文

@Autowired
private ApplicationContext appContext;

2)在您的方法中使用它

appContext.getBean(Class.forName("com.example.demo.repository." + modelName + "Repository"));