背景:我的代码库有很多模块,根据一些分析,创建Guice注入器需要花费大量时间。这几乎可以肯定是由于大量的模块和一些需要很长时间配置的模块的存在。从理论上讲,我可以生成2个以上可以单独配置的模块列表。
有没有办法并行化这些模块的配置?
例如,如果有一种方法可以组合或合并两个Guice注射器,我可以在不同的线程中创建它们,然后再加入它们。
答案 0 :(得分:0)
您可能希望使用Netflix中的Concurrent Singleton
库,它允许您以并发方式延迟加载Guice模块。
https://github.com/Netflix/governator/wiki/Concurrent-Singleton
Guice的默认Singleton范围同步a上的所有对象创建 单锁(见这里)。这样做是为了避免使用循环进行死锁 依赖。 Governator添加了FineGrainedLazySingleton注释 锁定Guice Key,以便可以创建多个单例 同时。循环依赖很少见 FineGrainedLazySingleton在这些情况下面临死锁风险 更好的并发性的好处。
使用FineGrainedLazySingleton注释的类将是
- 懒洋洋地创建(像Lazy Singleton)
- 由FineGrainedLazySingletonScope创建,它同步 Guice Key而不是InternalInjectorCreator.class)
- 能够与其他FineGrainedLazySingleton一起创建 不同的主题
醇>