【问题标题】:JavaFX + Spring boot implementationJavaFX + Spring Boot 实现
【发布时间】:2018-02-21 15:35:54
【问题描述】:

通过“Spring boot + JavaFX”合作获得认可。

希望得到此类问题的答案:

  1. 在整个网络的示例中,我发现只有“@SpringBootApplication”设置为“...扩展应用程序”并通过此覆盖“init()”方法的情况。但是有没有办法将初始注释放在另一个地方并将“应用程序”bean标记为组件,从而手动启动它?

我对“JavaFX”还不是很好,我尝试通过调用“Application.start(UIClass.class)”来启动该 bean,但没有任何 spring 功能(我认为这不会'不启动对象 bean,而是单独启动它)。

  1. 如何从“扩展应用程序”正确启动 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


【解决方案1】:

一般来说,我会提出一个论点,即如果您从应用程序的另一部分访问Application 实例,您可能需要重构您的应用程序。 Application 的作用只是管理应用程序生命周期,因此从其他地方访问该对象表明您可能在某处违反了设计原则(至少单一职责)。

也就是说,有一些极端情况。我有一个应用程序需要访问控制器中的HostServices,而这通常只能通过Application 实例获得。在这种情况下,我使用了与您提出的类似的解决方案/解决方法,以便以编程方式将 HostServices 注册为“Spring 管理的”bean。

这里的底线是您有两个工具包/框架,它们在某种程度上负责创建和管理对象生命周期。 (JavaFX 与其说是一个框架,不如说是一个工具包,并没有做太多的对象生命周期管理,但它确实做了一些。)任何时候,当您处于这种情况并且您希望一个框架知道由其他框架,您需要在两个框架之间进行一些编程连接。这是一个例子,因为 Application 实例是由 JavaFX 为你创建的,所以如果你想让 Spring 知道它,你必须明确地告诉 Spring 这件事。

因此,总而言之,正确构建应用程序将最大限度地减少对您建议的各种解决方法的需求,但在某些情况下可能需要这样做。通常没有办法配置一个框架来支持另一个框架创建的对象,除非第一个框架明确支持第二个框架。

【讨论】:

  • 谢谢。将就正确的应用程序结构听取您的建议。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-03-25
  • 2015-07-18
  • 2020-06-01
  • 2019-05-30
  • 2021-02-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多