Guice Servlet now uses findBindingsByType. Should improve startup performance.
git-svn-id: https://google-guice.googlecode.com/svn/trunk@816 d779f126-a31b-0410-b53b-1d3aecad763e
diff --git a/servlet/src/com/google/inject/servlet/ManagedFilterPipeline.java b/servlet/src/com/google/inject/servlet/ManagedFilterPipeline.java
index 3c6eed3..23491e3 100755
--- a/servlet/src/com/google/inject/servlet/ManagedFilterPipeline.java
+++ b/servlet/src/com/google/inject/servlet/ManagedFilterPipeline.java
@@ -26,7 +26,6 @@
import java.io.IOException;
import java.util.Collections;
import java.util.List;
-import java.util.Map;
import javax.servlet.FilterChain;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletContext;
@@ -75,13 +74,11 @@
*/
private List<FilterDefinition> collectFilterDefinitions(Injector injector) {
List<FilterDefinition> filterDefinitions = Lists.newArrayList();
- for (Map.Entry<Key<?>, Binding<?>> entry : injector.getBindings().entrySet()) {
- if (FILTER_DEFS.equals(entry.getKey().getTypeLiteral())) {
+ for (Binding<?> entry : injector.findBindingsByType(FILTER_DEFS)) {
- @SuppressWarnings("unchecked")
- Key<List<FilterDefinition>> defsKey = (Key<List<FilterDefinition>>) entry.getKey();
- filterDefinitions.addAll(injector.getInstance(defsKey));
- }
+ @SuppressWarnings("unchecked") //guarded by findBindingsByType()
+ Key<List<FilterDefinition>> defsKey = (Key<List<FilterDefinition>>) entry.getKey();
+ filterDefinitions.addAll(injector.getInstance(defsKey));
}
return filterDefinitions;
diff --git a/servlet/src/com/google/inject/servlet/ManagedServletPipeline.java b/servlet/src/com/google/inject/servlet/ManagedServletPipeline.java
index 14cceb9..466568f 100755
--- a/servlet/src/com/google/inject/servlet/ManagedServletPipeline.java
+++ b/servlet/src/com/google/inject/servlet/ManagedServletPipeline.java
@@ -25,7 +25,6 @@
import java.io.IOException;
import java.util.Collections;
import java.util.List;
-import java.util.Map;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
@@ -58,13 +57,11 @@
*/
private List<ServletDefinition> collectServletDefinitions(Injector injector) {
List<ServletDefinition> servletDefinitions = Lists.newArrayList();
- for (Map.Entry<Key<?>, Binding<?>> entry : injector.getBindings().entrySet()) {
- if (SERVLET_DEFS.equals(entry.getKey().getTypeLiteral())) {
+ for (Binding<?> entry : injector.findBindingsByType(SERVLET_DEFS)) {
- @SuppressWarnings("unchecked")
+ @SuppressWarnings("unchecked") //guarded by findBindingsByType()
Key<List<ServletDefinition>> defsKey = (Key<List<ServletDefinition>>) entry.getKey();
servletDefinitions.addAll(injector.getInstance(defsKey));
- }
}
return servletDefinitions;
diff --git a/servlet/test/com/google/inject/servlet/ServletPipelineRequestDispatcherTest.java b/servlet/test/com/google/inject/servlet/ServletPipelineRequestDispatcherTest.java
index f5b5d41..0b04931 100644
--- a/servlet/test/com/google/inject/servlet/ServletPipelineRequestDispatcherTest.java
+++ b/servlet/test/com/google/inject/servlet/ServletPipelineRequestDispatcherTest.java
@@ -33,6 +33,7 @@
import javax.servlet.http.HttpServletResponse;
import junit.framework.TestCase;
import static org.easymock.EasyMock.createMock;
+import static org.easymock.EasyMock.eq;
import static org.easymock.EasyMock.expect;
import static org.easymock.EasyMock.expectLastCall;
import static org.easymock.EasyMock.replay;
@@ -78,18 +79,19 @@
expect(injector.getInstance(HTTP_SERLVET_KEY))
.andReturn(mockServlet);
+
final Key<List<ServletDefinition>> servetDefsKey = Key
.get(new TypeLiteral<List<ServletDefinition>>() {});
- expect(injector.getBindings())
- .andReturn(new HashMap<Key<?>, Binding<?>>() {{
- put(servetDefsKey, createMock(Binding.class));
- }});
+ Binding mockBinding = createMock(Binding.class);
+ expect(mockBinding.getKey()).andReturn(servetDefsKey);
+ expect(injector.findBindingsByType(eq(servetDefsKey.getTypeLiteral())))
+ .andReturn(ImmutableList.<Binding<List<ServletDefinition>>>of(mockBinding));
expect(injector.getInstance(servetDefsKey))
.andReturn(ImmutableList.of(servletDefinition));
- replay(injector, mockRequest);
+ replay(injector, mockRequest, mockBinding);
// Have to init the Servlet before we can dispatch to it.
servletDefinition.init(null, injector);
@@ -103,7 +105,7 @@
assertTrue("Include did not dispatch to our servlet!", run[0]);
- verify(injector, mockRequest);
+ verify(injector, mockRequest, mockBinding);
}
public final void testForwardToManagedServlet() throws IOException, ServletException {
@@ -144,16 +146,16 @@
final Key<List<ServletDefinition>> servetDefsKey = Key
.get(new TypeLiteral<List<ServletDefinition>>() {});
- expect(injector.getBindings())
- .andReturn(new HashMap<Key<?>, Binding<?>>() {{
- put(servetDefsKey, createMock(Binding.class));
- }});
+ Binding mockBinding = createMock(Binding.class);
+ expect(mockBinding.getKey()).andReturn(servetDefsKey);
+ expect(injector.findBindingsByType(eq(servetDefsKey.getTypeLiteral())))
+ .andReturn(ImmutableList.<Binding<List<ServletDefinition>>>of(mockBinding));
expect(injector.getInstance(servetDefsKey))
.andReturn(ImmutableList.of(servletDefinition));
- replay(injector, mockRequest, mockResponse);
+ replay(injector, mockRequest, mockResponse, mockBinding);
// Have to init the Servlet before we can dispatch to it.
servletDefinition.init(null, injector);
@@ -166,7 +168,7 @@
assertTrue("Include did not dispatch to our servlet!", run[0]);
- verify(injector, mockRequest, mockResponse);
+ verify(injector, mockRequest, mockResponse, mockBinding);
}
public final void testForwardToManagedServletFailureOnCommittedBuffer()
@@ -214,16 +216,16 @@
final Key<List<ServletDefinition>> servetDefsKey = Key
.get(new TypeLiteral<List<ServletDefinition>>() {});
- expect(injector.getBindings())
- .andReturn(new HashMap<Key<?>, Binding<?>>() {{
- put(servetDefsKey, createMock(Binding.class));
- }});
+ Binding mockBinding = createMock(Binding.class);
+ expect(mockBinding.getKey()).andReturn(servetDefsKey);
+ expect(injector.findBindingsByType(eq(servetDefsKey.getTypeLiteral())))
+ .andReturn(ImmutableList.<Binding<List<ServletDefinition>>>of(mockBinding));
expect(injector.getInstance(servetDefsKey))
.andReturn(ImmutableList.of(servletDefinition));
- replay(injector, mockRequest, mockResponse);
+ replay(injector, mockRequest, mockResponse, mockBinding);
// Have to init the Servlet before we can dispatch to it.
servletDefinition.init(null, injector);
@@ -237,7 +239,7 @@
dispatcher.forward(mockRequest, mockResponse);
}
finally {
- verify(injector, mockRequest, mockResponse);
+ verify(injector, mockRequest, mockResponse, mockBinding);
}
}