1 package org.directwebremoting.guice.spring;2 3 import com.google.inject.AbstractModule;4 import com.google.inject.Provider;5 6 import static org.directwebremoting.guice.DwrScopes.GLOBAL;7 8 import org.springframework.beans.factory.BeanFactory;9 10 /**11 * Ties {@code SpringIntegration.fromSpring} providers12 * to a BeanFactory whose provider is a Closeable in global13 * application scope, which means that it will be destroyed 14 * when the servlet context is destroyed.15 */16 public class SpringModule extends AbstractModule 17 {18 public SpringModule(BeanFactoryLoader loader)19 {20 this.provider = new CloseableBeanFactoryProvider(loader);21 }22 23 protected void configure() 24 {25 bind(BeanFactory.class)26 .toProvider(CloseableBeanFactoryProvider.class)27 .asEagerSingleton();28 29 bind(CloseableBeanFactoryProvider.class)30 .toProvider(providerOfProvider)31 .in(GLOBAL);32 }33 34 private final CloseableBeanFactoryProvider provider;35 36 private final Provider<CloseableBeanFactoryProvider> providerOfProvider = 37 new Provider<CloseableBeanFactoryProvider>()38 {39 public CloseableBeanFactoryProvider get()40 {41 return provider;42 }43 };44 }45