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;
正如你所看到的,微微將創建一個新的實例只在第一次。在停止容器之前的任何後續請求都將返回完全相同的實例。