确保模块仅在Guice中加载一次

 空白画叶子 发布于 2023-02-08 15:54

必须处理Guice,我想知道我应该如何处理模块方面的依赖关系.

在Guice中,每个模块都由一个实例提供.因此,如果我有一个需要某个服务的模块,它会创建一个模块,为该服务添加一个绑定并安装它(binder.install(module)).

现在我有两个独立的模块,完全可以独立使用,并且都安装相同的数据库模块.

独立使用这两个模块没有问题,但如果两个模块在同一个应用程序中使用会发生什么?数据库模块将由两个模块独立加载,但不能正确.

有没有办法询问活页夹是否某种类型已经绑定?我无法使用getProvider来检查它,因为所有返回的都是LookupProvider,无论是否已经绑定了什么.

那么如何处理这种情况呢?

更新:

它接缝Guice无法提供以下功能:

    检查给定模块是否已加载.

    检查给定的类是否已绑定.

    使用配置中的提供程序可以执行分布式配置(模块能够配置要提供的对象).

Tavian Barne.. 13

Guice有两个功能来处理这种情况.第一个是模块重复数据删除.这意味着如果安装两个等效的模块(by equals()hashCode()),则只configure()运行一个方法.但是,这种解决方案有些脆弱,因为它无法在SPI转换中存活Modules.override(),等等.

第二个和IMO更好的解决方案是绑定重复数据删除.这意味着Guice将接受完全重复的绑定.因此,如果你的模块没有bind(Interface.class).to(Implementation.class),它的configure()方法运行两次甚至不重要,因为Guice将处理重复绑定就好了.

1 个回答
  • Guice有两个功能来处理这种情况.第一个是模块重复数据删除.这意味着如果安装两个等效的模块(by equals()hashCode()),则只configure()运行一个方法.但是,这种解决方案有些脆弱,因为它无法在SPI转换中存活Modules.override(),等等.

    第二个和IMO更好的解决方案是绑定重复数据删除.这意味着Guice将接受完全重复的绑定.因此,如果你的模块没有bind(Interface.class).to(Implementation.class),它的configure()方法运行两次甚至不重要,因为Guice将处理重复绑定就好了.

    2023-02-08 15:56 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有