View Javadoc

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} providers
12   * to a BeanFactory whose provider is a Closeable in global
13   * 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  }