我有一个JavaFX + Spring Boot应用程序。当我尝试用它的控制器加载新的FXML时,它工作正常,但是当我第二次或第三次加载它时,它给了我相同的实例,并且不会创建一个新实例。FXML加载程序不会创建新实例
我FXML装载机如下:
public <T> T loadAndGetController(String fxmlPath) throws IOException {
FXMLLoader loader = new FXMLLoader();
loader.setControllerFactory(context::getBean); // Spring now FXML Controller Factory
loader.setLocation(getClass().getResource(fxmlPath));
loader.setResources(ResourceBundle.getBundle("language/lang",
new Locale(languageController.getLanguage().getValue(), languageController.getLanguage().toString())));
loader.load();
return loader.getController();
}
加载新FXML:
TabController tabController = (TabController) StageManager.loadAndGetController(FXMLViews.TAB.getFxmlFile());
,当我尝试将其添加到我的加载器列表,这些ID是相同的,作为散列代码,这意味着它是相同的实例。因此它没有创建一个新的。
也许我装我的错FXMLs或只是Spring的引导控制器工厂在这种情况下工作的怪异。有什么建议么?
'context'的范围是什么,'getBean'是如何实现的?如果只有一个'context'的实例,并且它总是返回相同的控制器,那么将只有一个。 – Itai
这不正是春天应该用它做的单身豆吗? – fabian