我希望通过为它提供一个工厂方法(在Guice中为@Provides
方法)来配置PicoContainer,以便在每次(重新)启动容器时用于创建新实例。这里的要点是我需要在每个循环中将该实例作为单例,换句话说我希望它被缓存。
答案 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将仅在第一次创建新实例。在停止容器之前的任何后续请求都将返回相同的实例。