Spring boot jpa集成了javafx服务null

Spring boot jpa集成了javafx服务null,java,javafx,spring-boot,spring-data-jpa,Java,Javafx,Spring Boot,Spring Data Jpa,我已经将spring boot jpa与javafx应用程序集成。集成成功,fx屏幕加载了场景,问题是@Autowired注释字段上的服务变为null。 你可以在github上找到我的整个项目 pom详细信息 <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactI

我已经将spring boot jpa与javafx应用程序集成。集成成功,fx屏幕加载了场景,问题是@Autowired注释字段上的服务变为null。 你可以在github上找到我的整个项目

pom详细信息

<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.3.3.RELEASE</version>
    </parent>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>org.postgresql</groupId>
            <artifactId>postgresql</artifactId>
        </dependency>
    </dependencies>
存储库

@Repository
public interface BloodRepository extends JpaRepository<BloodGroup, Integer>{
}
fx控制器

@Component
public class HomeController implements BootInitializable {
    private ApplicationContext springContext;
    @Autowired
    private BloodGroupService bloodGroupService;
    @Autowired
    private BloodRepository  bloodRepository;

    @Override
    public void initialize(URL arg0, ResourceBundle arg1) {}

    @Override
    public void setApplicationContext(ApplicationContext arg0) throws BeansException {
        this.springContext = springContext;
    }

    @Override
    public void initConstruct() {}

    @Override
    public void stage(Stage primaryStage) {}

    @Override
    public Node initView() {
        try {
            FXMLLoader loader = new FXMLLoader();
            loader.setLocation(getClass().getResource(Screens.HOME));
            //loader.setController(springContext.getBean(this.getClass()));
            return loader.load();
        } catch (IOException e) {
            System.err.println("can't load scene");
            e.printStackTrace();
            return null;
        }
    }

    @FXML
    private void addMemberSelect(){
         if(bloodRepository!=null){
               System.out.println("service initialized");
           }else{
               System.out.println("service null"); 
           }
    }

}

@詹姆斯会在我的代码中找到问题。
我已经在fxml页面中指定了控制器。根据james的建议,将控制器从fxml删除到fxml控制器,如加载程序.setController(this)@james\u会在我的代码中找到问题。
我已经在fxml页面中指定了控制器。根据james的建议,将控制器从fxml删除到fxml控制器,如
loader.setController(this)

为什么要注释掉
loader.setController(…)
行?你不需要
loader.setController(这个)那里?因为我已经在fxml页面上指定了控制器。但这是一条创建控制器类的新实例的指令(即不是由spring管理的实例)。删除
fx:controller
属性并使用
loader.setController(this)
谢谢@James\u D这就是问题所在。为什么要注释掉
loader.setController(…)
行?你不需要
loader.setController(这个)那里?因为我已经在fxml页面上指定了控制器。但这是一条创建控制器类的新实例的指令(即不是由spring管理的实例)。删除
fx:controller
属性并使用
loader.setController(此)
谢谢@James\u D这就是问题所在。。
@Service
public class BloodGroupServiceImpl implements BloodGroupService{
    @Autowired
    private BloodRepository  bloodRepository;
    @Override
    public Collection<BloodGroup> findAllBloodGroup() {
        return bloodRepository.findAll();
    }
}
@Component
public class HomeController implements BootInitializable {
    private ApplicationContext springContext;
    @Autowired
    private BloodGroupService bloodGroupService;
    @Autowired
    private BloodRepository  bloodRepository;

    @Override
    public void initialize(URL arg0, ResourceBundle arg1) {}

    @Override
    public void setApplicationContext(ApplicationContext arg0) throws BeansException {
        this.springContext = springContext;
    }

    @Override
    public void initConstruct() {}

    @Override
    public void stage(Stage primaryStage) {}

    @Override
    public Node initView() {
        try {
            FXMLLoader loader = new FXMLLoader();
            loader.setLocation(getClass().getResource(Screens.HOME));
            //loader.setController(springContext.getBean(this.getClass()));
            return loader.load();
        } catch (IOException e) {
            System.err.println("can't load scene");
            e.printStackTrace();
            return null;
        }
    }

    @FXML
    private void addMemberSelect(){
         if(bloodRepository!=null){
               System.out.println("service initialized");
           }else{
               System.out.println("service null"); 
           }
    }

}