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 }