JavaFX SpringBoot SpringJDBC SQLite CRUD应用程序-配置
我正在用SpringBoot+SpringJDBC+SQLite开发一个JavaFXCRUD应用程序。我正在使用EclipseIDE 故事: 我正在逐步开发这个应用程序。我用老式的JDBC连接实现了JavaFX+SQLite CRUD应用程序。但是在集成SpringBoot+SpringJDBC之后,我得到了一个错误。我认为将应用程序配置传递到所有文件时会出现错误 主课JavaFX SpringBoot SpringJDBC SQLite CRUD应用程序-配置,java,sqlite,spring-boot,javafx,spring-jdbc,Java,Sqlite,Spring Boot,Javafx,Spring Jdbc,我正在用SpringBoot+SpringJDBC+SQLite开发一个JavaFXCRUD应用程序。我正在使用EclipseIDE 故事: 我正在逐步开发这个应用程序。我用老式的JDBC连接实现了JavaFX+SQLite CRUD应用程序。但是在集成SpringBoot+SpringJDBC之后,我得到了一个错误。我认为将应用程序配置传递到所有文件时会出现错误 主课 @SpringBootApplication public class Main { public static v
@SpringBootApplication
public class Main {
public static void main(String[] args) {
Application.launch(MyApplication.class, args);
}
}
和MyApplication.Class(没有注释)
和AppConfig.class
@Configuration
@ConditionalOnClass(DataSource.class)
@Profile("sqlite")
@ComponentScan(basePackages= "com.fz")
@PropertySource("classpath:data/config.properties")
public class AppConfig {
@Autowired
Environment environment;
private final String DB_URL = "fz.db.url";
@Bean
DataSource dataSource() {
final DriverManagerDataSource driverManagerDataSource = new DriverManagerDataSource();
driverManagerDataSource.setUrl(environment.getProperty(DB_URL));
return driverManagerDataSource;
}
}
和SampleController.class
@Controller
public class SampleController implements Initializable {
//-- un-necessary lines are ignored to copy
@Autowired
@Qualifier("studentsDAOImpl")
private StudentsDAO studentsDAO;
@Override
public void initialize(URL location, ResourceBundle resources) {
tableViewList.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);
setColumnProperties();
loadStudentsDetails();
}
private void loadStudentsDetails() {
studentsList.clear();
studentsList.addAll(studentsDAO.getAllStudents()); // this is line 83
tableViewList.setItems(studentsList);
}
}
和错误报告
Caused by: java.lang.NullPointerException
at com.fz.SampleController.loadStudentsDetails(SampleController.java:83)
at com.fz.SampleController.initialize(SampleController.java:78)
at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2573)
... 17 more
到目前为止,我对这个错误的猜测是,配置工作不正常-我想是的。我需要建议并帮助我改进这一点。FXMLLoader创建控制器实例的默认行为是简单地实例化它,这意味着没有注入依赖项。为了获得注入,您需要使用Spring ApplicationContext来管理实例创建 Josh Long发布了一个Spring Tips分期付款,演示了如何一步一步地做到这一点: 然而,这是一个相当手工和重复的过程。这就是试图解决的问题。您可以在此处找到文档和示例代码:
免责声明:我创建了库,因此我有偏见:)我认为您需要将SampleController作为一个组件,并使用FxWeaver加载FXML视图。它使用应用程序上下文并在spring容器中注册控制器。您需要以某种方式确保从spring检索控制器,而不是默认机制(在其中,
fxmloader
直接实例化它)。我从未使用过FXWeaver,这是一种解决方案;另一种方法是将控制器工厂设置为Spring应用程序上下文。请参阅(以及其他许多方法)
Caused by: java.lang.NullPointerException
at com.fz.SampleController.loadStudentsDetails(SampleController.java:83)
at com.fz.SampleController.initialize(SampleController.java:78)
at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2573)
... 17 more