1
我希望通过为PicoContainer提供一种工厂方法(如Guice中的@Provides
方法)来配置PicoContainer,以在每次重新启动容器时创建一个新实例。这里的要点是我需要这个实例在每个循环中成为一个单例,换句话说,我希望它被缓存。使用具有缓存行为的工厂方法配置PicoContainer
我希望通过为PicoContainer提供一种工厂方法(如Guice中的@Provides
方法)来配置PicoContainer,以在每次重新启动容器时创建一个新实例。这里的要点是我需要这个实例在每个循环中成为一个单例,换句话说,我希望它被缓存。使用具有缓存行为的工厂方法配置PicoContainer
我找到了解决办法:配置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;
正如你所看到的,微微将创建一个新的实例只在第一次。在停止容器之前的任何后续请求都将返回完全相同的实例。