最初,我有一个简单的spring boot项目,其中包含一个名为DemoConfig.java的配置文件,如下所示:
@Configuration
@PropertySource("classpath:application.properties")
public class DemoConfig
{
@Value("${deviceName}")
private String deviceName;
@Value("${platformName}")
private String platformName;
@Value("${platformVersion}")
private String platformVersion;
@Value("${appPackage}")
private String appPackage;
@Value("${appActivity}")
private String appActivity;
现在,我想将javafx应用于我的项目,以某种方式启动一个配置页面,供用户配置这些值。因此,我有这个DemoController.java作为fx:controller。
@Component
public class DemoController
{
@Resource
private DemoConfig demoConfig;
public TextField platformName = new TextField(demoConfig.getPlatformName());
public TextField platformVersion = new TextField(demoConfig.getPlatformVersion());
public TextField deviceName = new TextField(demoConfig.getDeviceName());
public TextField appActivity = new TextField(demoConfig.getAppActivity());
public TextField appPackage = new TextField(demoConfig.getAppPackage());
}
现在我得出以下结论:因为尚未将DemoConfig作为bean注入,所以DemoController的初始化将失败,对于如何将Controller与我的Configuration类结合起来,我有点困惑。我的目标很简单,只需使用bean DemoConfig的值初始化Controller的文本字段即可。任何想法都会有所帮助!谢谢!
编辑:我没有考虑FXML为我的答案。答案已被接受后,所有学分将归因于James_D的有效评论。
从评论:
如果这是FXML文件的控制器,则完全不应实例化文本字段。如果在FXML文件中声明了它们,则FXMLLoader将实例化它们并将它们注入到控制器中。只需在控制器的initialize()方法中设置文本即可;您的依赖项将在调用时注入。– James_D
使用@PostConstruct:https : //www.baeldung.com/spring-postconstruct-predestroy这应该确保您的bean被注入(如果没有其他问题)。
将所有文本字段初始化都放在postconstruct中:
@Component
public class DemoController
{
@Autowire
private DemoConfig demoConfig;
public TextField platformName;
public TextField platformVersion;
public TextField deviceName;
public TextField appActivity;
public TextField appPackage;
@PostConstruct
private void postConstruct() {
platformName = new TextField(demoConfig.getPlatformName());
platformVersion = new TextField(demoConfig.getPlatformVersion());
deviceName = new TextField(demoConfig.getDeviceName());
appActivity = new TextField(demoConfig.getAppActivity());
appPackage = new TextField(demoConfig.getAppPackage());
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句