首页 > 解决方案 > 使用缓存创建 guice 提供程序

问题描述

我想了解@singleton vs guice 中的缓存

我有一个提供者。这会给我firefoxoption。这会做很多json解析和一些繁重的事情

@Singleton
public class FirefoxOptionsProvider extends AbstractModule {

  @Provides
  @Named("FirefoxOptionsProvider")
  @Singleton
  public FirefoxOptions getFireFoxOptions(FirefoxBinary firefoxBinary, Gson gson) {
        FirefoxOptions firefoxOptions = new FirefoxOptions();
        firefoxOptions.setAcceptInsecureCerts(true);
        fireFoxOptions.addPreference("pdfjs.disabled", false); // bydefault it is false
        firefoxOptions.setPageLoadStrategy(PageLoadStrategy.NONE);  
        //some costly operation like json parsing and setting firefox options
        return firefoxOptions;
}

我调用这个方法如下

@Log4j2
@AllArgsConstructor(onConstructor = @__(@Inject))
public class FirefoxDriverSetup {
    private FirefoxOptionsProvider firefoxOptionsProvider;

    public WebDriver getWebdriver() {

        fireFoxOptions.addPreference("pdfjs.disabled", true);
        return new FirefoxDriver(firefoxOptions);
    }
}

我的假设

fireFoxOptions当我在 fireFoxOptions.addPreference("pdfjs.disabled", true);里面做的时候,我原来的单例实例会被修改吗getWebdriver()

如果是这样,当我getWebdriver()下次调用时它会返回fireFoxOptionsfireFoxOptions.addPreference("pdfjs.disabled", true);因为上次我修改了这个单例对象

问题:

是否可以缓存所有的内部处理getFireFoxOptions()并每次都返回新的getFireFoxOptions ,以便我总是得到 fireFoxOptions 默认设置的新实例 fireFoxOptions.addPreference("pdfjs.disabled", false); 无需每次都计算

标签: javaselenium-webdriverguice

解决方案


推荐阅读