Benutzerdefinierte JavaFX-Controller-Factory

Ich habe mit dem experimentiertFXMLLoader und mit dersetControllerFactory Methode mit einem benutzerdefiniertenCallback<P,R> Implementierung.

Die ORACLE-Dokumentation sagt folgendes:

Eine Implementierung gibt möglicherweise einen Nullwert zurück, um anzuzeigen, dass sie keinen Controller des angegebenen Typs erstellt oder nicht erstellen kann. In diesem Fall wird der Standard-Controller-Konstruktionsmechanismus vom Lader verwendet.

Das Ergebnis, das ich erreichen möchte, ist, dass ich ein Abhängigkeitsinjektionsframework verwenden kann, um alle Controller zu erstellen, die Parameter erfordern, aber ich werde das zulassenFXMLLoader Laden Sie alle Controller, die keine Parameter benötigen.

Also, wenn ich die folgende einfache FXML-Datei habe, die die verwendetViewController Klasse, die keine Parameter akzeptiert ...

<StackPane fx:id="pane"
          xmlns:fx="http://javafx.com/fxml"
          fx:controller="my.package.ViewController">
</StackPane>

und ich benutze die folgende einfache Controller-Factory-Implementierung, um dem zu signalisierenFXMLLoader dass ich es in diesem Fall den Aufbau des Controllers verwalten möchte ...

loader.setControllerFactory(new Callback<Class<?>, Object>(){
    @Override
    public Object Call(Class<?> type) {
        return null; // Let the FXMLLoader handle construction...
    }
});

nach dem anruf derload() method meine Initialisierungsmethode in derViewController Klasse wird nie aufgerufen (ich habe dies mit einem Haltepunkt überprüft).

Wenn ich meine Controller-Factory-Implementierung ändere, um eine Instanz von zurückzugebenViewController klasse dann klappt alles wie erwartet.

Kann mir jemand helfen, meine Verwirrung zu beseitigen? Benutze ich dieCallback Schnittstelle falsch oder ist die ORACLE-Dokumentation falsch?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage