J'ai une application JavaFX + Spring Boot. Lorsque j'essaie de charger un nouveau FXML avec son contrôleur, cela fonctionne très bien, mais quand je le charge une deuxième ou une troisième fois, il me donne la même instance et n'en crée pas une nouvelle.FXML Loader ne crée pas de nouvelle instance
Mon chargeur FXML comme suit:
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();
}
Chargement nouvelle FXML:
TabController tabController = (TabController) StageManager.loadAndGetController(FXMLViews.TAB.getFxmlFile());
Et quand je tente de l'ajouter dans ma liste de contrôleur chargé, les ID sont les mêmes, que le hachage codes, ce qui signifie que c'est la même instance. Ainsi, il n'en a pas créé un nouveau.
Peut-être que je charge mes FXMLs mal ou tout simplement l'usine de contrôleur Spring-Boot fonctionne bizarre dans ce cas. Aucune suggestion?
Quelle est la portée de 'context', et comment' getBean' est-il implémenté? S'il n'y a qu'une seule instance de 'context' et qu'elle renvoie toujours le même contrôleur, alors il n'y en aura plus qu'une seule. – Itai
N'est-ce pas exactement ce que le printemps est censé faire avec ses haricots singleton ??? – fabian