我正在努力让Weld在我的JavaFX 2(SE)应用程序中工作(或者我应该在Weld中说JavaFX?)。我有控制器响应用户交互。现在我想将我的服务(如数据库服务)注入这些控制器。
使用Weld,这应该像以下一样简单:
@Inject
private MyService service;
现在,为了初始化Weld,有三种选择 选项1)
public void main(@Observes ContainerInitialized event) {
launch(); // start JavaFX
}
选项2)
public static void main(final String[] args) {
new StartMain(args).go();
launch(args);
}
选项3)
public static void main(final String[] args) {
final WeldContainer weld = new Weld().initialize();
service = weld.instance().select(MyService.class).get();
launch(args);
}
选项1和2导致我的控制器中出现NullPointerExceptions,因为在注释注入点没有注入任何内容。只有选项3有效,但这不是我真正需要的,因为我不想在我的主应用程序类中使用该服务,而是在我的JavaFX控制器中。使用选项3,我必须以某种方式将初始化的服务传递给我的控制器类,在这种情况下,我不需要焊接。那么如何将服务bean注入JavaFX控制器?不幸的是,我没有找到关于我的问题的文档。
也许有人积累了使用Weld和JavaFX的经验,可以帮助我。
更新
我在Weld discussion forum写下了我的一些努力,但遗憾的是我没有得到答案。在我看来,Weld不适用于JavaFX。我想我必须使用优秀的旧设置器将我的服务插入我的控制器(请参阅论坛以获得解决方案)。
更新2
我找到了blog about Weld and JavaFX 2。我还没有尝试过解决方案,但我认为它对其他程序员很有用。