2017-06-14 46 views
1

我希望通過爲PicoContainer提供一種工廠方法(如Guice中的@Provides方法)來配置PicoContainer,以在每次重新啓動容器時創建一個新實例。這裏的要點是我需要這個實例在每個循環中成爲一個單例,換句話說,我希望它被緩存。使用具有緩存行爲的工廠方法配置PicoContainer

回答

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; 

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