【发布时间】:2018-02-21 15:35:54
【问题描述】:
通过“Spring boot + JavaFX”合作获得认可。
希望得到此类问题的答案:
- 在整个网络的示例中,我发现只有“@SpringBootApplication”设置为“...扩展应用程序”并通过此覆盖“init()”方法的情况。但是有没有办法将初始注释放在另一个地方并将“应用程序”bean标记为组件,从而手动启动它?
我对“JavaFX”还不是很好,我尝试通过调用“Application.start(UIClass.class)”来启动该 bean,但没有任何 spring 功能(我认为这不会'不启动对象 bean,而是单独启动它)。
- 如何从“扩展应用程序”正确启动 Spring 应用程序?我发现的示例建议覆盖“init()”并将“ApplicationContext”放在那里。这可行,但没有设法使用自动装配和类似的东西(我确实验证了绑定工作并具有适当的命名)。
在一个类似的线程 (Spring Boot Main and JavaFX) 中,我找到了使用以下方法的解决方案:
ApplicationContext ctx = SpringApplication.run(Root.class);
ctx.getAutowireCapableBeanFactory().autowireBean(this);
但我觉得这更像是一种解决方法,我在某个地方犯了一个错误。
提前致谢。
【问题讨论】:
-
您可能需要先了解 JavaFX 应用程序生命周期,然后再将其与 Spring [Boot] 结合使用。
Application类(正如您所看到的,在应用程序启动时为您实例化)是 JavaFX 应用程序的入口点,实际上应该只管理应用程序生命周期。所以无论如何,用@SpringBootApplication注释确实是很自然的类。如果您需要在其他任何地方访问Application实例,则基本上您的 JavaFX 应用程序结构不正确。 -
感谢您的回复。我知道“从一个点跳到另一个点”不是最佳做法。只是想做一些简单的事情(开始制造“颠簸”并从中学习:)),并抓住了这一点。
-
我认为应用程序应该是焦点,但想知道“如果有一天我需要另一种方法怎么办”,其中需要在某些时候调用应用程序遥远的执行点。
-
好的,那么现在的问题是什么?作为一种解决方法,您可以使用最后的代码块手动注入
Application实例;但在实际应用程序中,您将不需要它,因为无论如何您都不需要应用程序中的任何其他地方的Application实例...... -
当前的问题是我正在为应用程序使用 Spring 注释的方法,有一个带有 'SpringApplication.run()' 的 Init() 并且仍然需要调用 'autowireBean( this)',这是我对正确使用的怀疑。
标签: java spring spring-boot javafx