我一直在尝试使用自定义实现FXMLLoader
的方法。setControllerFactory
Callback<P,R>
ORACLE 文档说明如下:
一个实现可能会返回一个空值来表明它没有或不能创建给定类型的控制器;在这种情况下,加载程序将使用默认的控制器构造机制。
我想要实现的结果是我可以使用依赖注入框架来创建任何需要参数的控制器,但我会让FXMLLoader
加载任何不需要参数的控制器。
因此,如果我有以下使用ViewController
不接受参数的类的简单 FXML 文件...
<StackPane fx:id="pane"
xmlns:fx="http://javafx.com/fxml"
fx:controller="my.package.ViewController">
</StackPane>
在这种情况下,我使用以下简单的控制器工厂实现向我发出信号FXMLLoader
,我希望它管理控制器的构造......
loader.setControllerFactory(new Callback<Class<?>, Object>(){
@Override
public Object Call(Class<?> type) {
return null; // Let the FXMLLoader handle construction...
}
});
在调用该load()
方法后,我的ViewController
类中的 Initialise 方法永远不会被调用(我已经用断点验证了这一点)。
如果我更改我的控制器工厂实现以返回ViewController
该类的实例,那么一切都会按预期工作。
谁能帮我解决我的困惑?是我错误地使用了Callback
界面还是 ORACLE 文档不正确?