我有一個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