使用具有缓存行为的工厂方法配置PicoContainer

时间:2017-06-14 11:28:26

标签: java picocontainer

我希望通过为它提供一个工厂方法(在Guice中为@Provides方法)来配置PicoContainer,以便在每次(重新)启动容器时用于创建新实例。这里的要点是我需要在每个循环中将该实例作为单例,换句话说我希望它被缓存。

1 个答案:

答案 0 :(得分:0)

我找到了解决方案:配置FactoryInjector

MutablePicoContainer pico = new PicoBuilder()
      .withCaching()
      .withLifecycle()
      .build();
pico.addAdapter(new FactoryInjector<WebDriver>(){
    @Override
    public WebDriver getComponentInstance(PicoContainer container, Type into) {
        return new FirefoxDriver();
    }
});
pico.start()
d1 = pico.getComponent(WebDriver.class);
d2 = pico.getComponent(WebDriver.class);
assert d1 == d2;
pico.stop();
pico.dispose();
d3 = pico.getComponent(WebDriver.class);
assert d1 != d3;

如您所见,pico将仅在第一次创建新实例。在停止容器之前的任何后续请求都将返回相同的实例。