昨天我尝试创建连接Spring Boot和JavaFX的项目。我基于http://www.greggbolinger.com/let-spring-be-your-javafx-controller-factory/
因此,我创建了一个项目,并在运行应用程序时创建了spring上下文并运行了JavaFx应用程序。但是问题是当我尝试使用@Repository注解创建一些bean时。当我自动装配时,值是null。
CarGarageApplication.java
package com.car.garage;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import com.car.garage.dao.UsersRepository;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
@SpringBootApplication
@ComponentScan
@EnableJpaRepositories("com.car.garage.dao")
public class CarGarageApplication extends Application {
private ConfigurableApplicationContext mainContext;
private Parent rootNode;
@Autowired
UsersRepository usersRepository;
public static void main(String[] args) {
Application.launch(args);
}
@Override
public void init() throws Exception {
mainContext = SpringApplication.run(CarGarageApplication.class);
FXMLLoader loader = new FXMLLoader(getClass().getResource("/fxml/WelcomePage.fxml"));
loader.setControllerFactory(mainContext::getBean);
rootNode = loader.load();
}
@Override
public void start(Stage primaryStage) throws Exception {
primaryStage.setScene(new Scene(rootNode));
primaryStage.setResizable(false);
primaryStage.show();
System.out.println(usersRepository);
}
@Override
public void stop() throws Exception {
mainContext.close();
}
}
UsersRepository.java
package com.car.garage.dao;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;
import com.car.garage.model.User;
@Repository
public interface UsersRepository extends CrudRepository<User, Long> {
}
User.java
package com.car.garage.model;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
@Entity
public class User {
@Id
@GeneratedValue
private Long id;
private String username;
private String password;
public User(String username, String password) {
super();
this.username = username;
this.password = password;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
编辑:
mainContext.getBean(UsersRepository.class)
返回UsersRepository的正确bean实例,但是为什么@Autowired不起作用
答案 0 :(得分:0)
我们应该按照以下方法自动装配存储库类。因为从您自动装配另一个类的位置开始必须有SPRING STEREOTYPES类(@ Component,@ Service之类)
@Component
public class Anotherclass{
@Autowired
private UsersRepository usersRepository;
}