Ela*_*da2 1 java singleton guice
我有这个guice代码
public class MainModule extends AbstractModule {
@Override
protected void configure() {
bind(GlobalSettings.class).toProvider(GlobalSettingsProvider.class).in(Singleton.class);
}
Run Code Online (Sandbox Code Playgroud)
和
public class GlobalSettingsProvider implements Provider<GlobalSettings> {
@Override
public GlobalSettings get() {
GlobalSettings globalSettings = new GlobalSettings();
globalSettings.isDummyRun = Boolean.parseBoolean(System.getProperty("isDummyRun", "false"));
globalSettings.inputFlavor = System.getProperty("input_flavor", "none");
}
}
Run Code Online (Sandbox Code Playgroud)
和
public class A(){
public A() {
this.injector = Guice.createInjector(new MainModule());
injector.getInstance(IHttpClientReRunWrapper.class);
globalSettings = injector.getInstance(GlobalSettings.class);
resultsComparerRunner1 = injector.getInstance(ResultsComparerRunner.class);
resultsComparerRunner2 = injector.getInstance(ResultsComparerRunner.class);
resultsComparerRunner3 = injector.getInstance(ResultsComparerRunner.class);
}
}
Run Code Online (Sandbox Code Playgroud)
和
public class ResultsComparerRunner(){
public class ResultsComparerRunner(){
initStaticFromInjector();
}
private void initStaticFromInjector() {
routingResponseShortRepository = injector.getInstance(IRoutingResponseShortRepository.class);
globalSettings = injector.getInstance(GlobalSettings.class); //verify only one injector per run
}
Run Code Online (Sandbox Code Playgroud)
为什么我看到globalSettings的实例A和实例 ResultsComparerRunner有所不同?
我希望它是singelton
我很好奇提供商绑定加单的行为,所以我创建了一个测试- 依据根据您的代码:
@Test
public void execute() {
Injector injector = Guice.createInjector(new AbstractModule() {
@Override
protected void configure() {
bind(GlobalSettings.class).toProvider(GlobalSettingsProvider.class).in(Singleton.class);
}
});
GlobalSettings g1 = injector.getInstance(GlobalSettings.class);
GlobalSettings g2 = injector.getInstance(GlobalSettings.class);
assertThat(g1).isSameAs(g2);
}
Run Code Online (Sandbox Code Playgroud)
结果:绿色.这意味着您的模块设置正常,您的问题必须在其他地方.如何将注入器传递给ResultsComparerRunner?这真的是包含单例定义的注入器吗?
| 归档时间: |
|
| 查看次数: |
529 次 |
| 最近记录: |