在我的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";
}
答案 0 :(得分:0)
只需使用Sping应用程序上下文按其类型获取所需的存储库bean。
1)在控制器中自动关联上下文
@Autowired
private ApplicationContext appContext;
2)在您的方法中使用它
appContext.getBean(Class.forName("com.example.demo.repository." + modelName + "Repository"));