JavaFX和Spring:自动装配问题

时间:2016-10-01 11:37:45

标签: java spring javafx spring-boot

我正在尝试一起使用JavaFX和Spring。我特别使用Spring Boot。 我的问题是我在FXML控制器中都有Spring自动连接字段和JavaFX“自动连接”字段。 我在构造函数控制器中放置了一个断点,它实际上被调用了两次:一个是Spring,只有@Autowired个字段,一个是JavaFX,只是初始化@FXML个字段。

这是我的主要代码:

@SpringBootApplication
public class MySpringAndJavaFXApp extends AbstractJavaFXAndSpringApplication {

    @Override
    public void start(Stage window) throws Exception {
        Parent root = FXMLLoader.load(getClass().getResource("/fxml/home.fxml"));
        window.setTitle("My Title");
        window.setScene(new Scene(root, 500, 300));
        window.show();
    }


    public static void main(String[] args) {
       launchApp(MySpringAndJavaFXApp.class, args);
    }
}

这是我要扩展的课程:

public abstract class JavaFXAndSpringApplication extends Application {

    protected static void launchApp(Class<? extends JavaFXAndSpringApplication> classePrincipaleJavaFX, String[] args) {
        launch(classePrincipaleJavaFX,args);
    }

    private ConfigurableApplicationContext applicationContext;

    @Override
    public void init() throws Exception {
        applicationContext = SpringApplication.run(getClass());
        applicationContext.getAutowireCapableBeanFactory().autowireBean(this);
    }

    @Override
    public void stop() throws Exception {
        super.stop();
        applicationContext.close();
    }
}

一个由Spring管理和JavaFX管理的类的示例:

@Component
public class MixedController {

    @FXML
    private TextField aTextField;

    @Autowired
    private MyService myService; // MyService is a @Component


    public MixedController() {
        System.out.println("I am here"); // debugger goes twice here
    }
}

我如何轻松解决我的问题? 我尝试使用自定义FXML加载程序(例如JavaFX and Spring - beans doesn't Autowire)。但是,如果我用这样的加载器加载home.fxml文件,我在数据提供程序上出错(即Spring没有正确地获取我的数据库配置),我宁愿采用另一种方法。

0 个答案:

没有答案