栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

JavaFX和Spring-bean无法自动装配

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

JavaFX和Spring-bean无法自动装配

FXMLLoader.load(URL,ResourceBundle)
您所呼叫的方法是一种
static
方法-
因此它实际上不关注了
FXMLLoader
你化实例,以及因此忽略了
controllerFactory
它引用您的Spring bean工厂。

重写您的

SpringFXMLLoader
类,如下所示:

public class SpringFxmlLoader {    private static final ApplicationContext applicationContext = new AnnotationConfigApplicationContext(SpringApplicationConfig.class);    public Object load(String url, String resources) {        FXMLLoader loader = new FXMLLoader();        loader.setControllerFactory(clazz -> applicationContext.getBean(clazz));        loader.setLocation(getClass().getResource(url));        loader.setResources(ResourceBundle.getBundle(resources));        try { return loader.load();        } catch (IOException e) { e.printStackTrace();        }        return null;    }}

这使用 实例
方法

loader.load()
,它将使用您的控制器工厂:即它将使用Spring实例化控制器。

您看到两次加载控制器的原因是,默认情况下,bean工厂赋予了控制器单例作用域并使其急切地创建,因此,一旦创建bean
factory(

applicationContext
),它就会创建一个控制器。该控制器将进行
dataProvider
初始化(当然,但仅
构造函数完成 之后 )。然后,对静态
FXMLLoader.load(...)
方法的调用通过通常的机制(即,通过调用其no-
arg构造函数)创建第二个控制器。该实例将不会
dataProvider
在任何时候进行初始化。

顺便说一句,您可能不希望控制器成为单例。如果要两次加载FXML文件,以获取的两个实例,则

Parent
可能需要每个实例都有其自己的控制器,否则会发生奇怪的行为。我建议将控制器作为原型(这意味着Bean工厂将在每次请求实例时创建一个新实例,而不是重用单个实例)。您可以在config类中执行以下操作:

@Configuration@ComponentScan(basePackages = {"mycompany.imageviewer.controller", "mycompany.imageviewer.dataprovider.impl" })public class SpringApplicationConfig {    private static final Logger LOG = Logger.getLogger(SpringApplicationConfig.class);    @Bean    public DataProvider dataProvider() {        LOG.debug("Initializing dataProvider via SpringApplicationConfig");        return new DataProviderImpl();    }    @Bean    @Scope("prototype")    public ImageViewerController imageViewerController() {        LOG.debug("Initializing ImageViewerController via SpringApplicationConfig");        return new ImageViewerController();    }}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/508592.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号