我正在看这个例子:Building Applications in JavaFX 2.0他们展示了一个自定义的SpringFxmlLoader:
import java.io.IOException;
import java.io.InputStream;
import javafx.fxml.FXMLLoader;
import org.springframework.context.ApplicationContext;
public class SpringFxmlLoader
{
private ApplicationContext context;
public SpringFxmlLoader(ApplicationContext context)
{
this.context = context;
}
public Object load(String url, Class<?> controllerClass) throws IOException
{
InputStream fxmlStream = null;
try
{
fxmlStream = controllerClass.getResourceAsStream(url);
Object instance = context.getBean(controllerClass);
FXMLLoader loader = new FXMLLoader();
loader.getNamespace().put("controller", instance);
return loader.load(fxmlStream);
}
finally
{
if (fxmlStream != null)
{
fxmlStream.close();
}
}
}
}`
为什么需要创建一个特定的弹簧FXML Loader?我的意思是,即使使用简单的fxml加载器,当你加载这样的fxml:
无论如何 AnchorPane page = (AnchorPane) FXMLLoader.load(TabePaneGraph.class.getResource("Sample.fxml"));
调用样本控制器,任何初始化仍然完成。我试图了解这个特定的自定义SpringFxmlLoader实现背后的动机。
答案 0 :(得分:1)
有(至少)2种方法,如何指定控制器:
loader.getNamespace().put("controller", instance);
我不确定这部分,但我认为它可以在最新的JavaFX版本中替换为setController()
。
答案 1 :(得分:1)
皮肤猫有多种方法。我猜测在该文章中使用spring的动机是因为许多Web开发人员会熟悉它。它也可能使它看起来更像是Java EE应用程序的替代品。它是什么,但不是因为你可以使用弹簧。
您不需要使用任何依赖注入框架来开发JavaFX,实际上我们需要仔细查看我们的依赖项,因为如果您希望用户下载您的应用程序,它们将增加下载时间。