Я пишу приложение JavaFX и пытаюсь интегрировать DI с Dagger / Guice, но у меня возникают проблемы с внедрением в класс FXML Initializable. В основном я копирую код отсюда: https://bitbucket.org/gluon-oss/ignite/src/c85197b33852/src/test/java/com/gluonhq/ignite/?at=default
Впрыск работает отлично в основном классе (App.java).
Вот класс, где инъекция терпит неудачу:
public class FXMLController implements Initializable {
@FXML
private Label label;
@Inject
ConnectionManager connectionManager;
@Override
public void initialize(URL url, ResourceBundle rb) {
//do something with connectionManager
}
}
По сути, происходит следующее: когда я пытаюсь внедрить кинжал, он просто не открывает сцену, а при инъекции с хитростью выдает «Исключение в методе запуска приложения».
Остальной код:
DaggerModule для версии кинжала:
@Module(library = true, injects = {App.class, FXMLController.class}, complete = false)
public class DaggerModule {
@Provides
FXMLLoader provideFxmlLoader() {
return new FXMLLoader();
}
@Provides
ConnectionManager provideConnectionManager() {
return new ConnectionManager();
}
}
GuiceModule для версии guice:
public class GuiceModule extends AbstractModule {
@Override
protected void configure() {
bind(ConnectionManager.class);
}
}
Основной класс:
public class App extends Application {
// private final DaggerContext context = new DaggerContext(this, () -> Arrays.asList(new DaggerModule()));
private GuiceContext context = new GuiceContext(this, () -> Arrays.asList(new GuiceModule()));
@Inject
public ConnectionManager connectionManager;
@Inject
public FXMLLoader loader;
@Override
public void start(Stage stage) throws Exception {
context.init();
Parent root = (Parent) loader.load(getClass().getResource("scene.fxml"));
Scene scene = new Scene(root);
scene.getStylesheets().add(getClass().getResource("styles.css").toExternalForm());
stage.setOnCloseRequest(e -> Platform.exit());
stage.setTitle("title");
stage.setScene(scene);
stage.show();
connectionManager.initConnection();
}
public static void main(String[] args) {
launch(args);
}
@Override
public void stop() throws Exception {
super.stop();
System.exit(0);
}
}
Есть идеи, в чем здесь проблема?