Skip to content

Commit 544bc64

Browse files
committed
Merge branch '1.1.x'
2 parents dd6bf57 + a07f027 commit 544bc64

File tree

4 files changed

+295
-159
lines changed

4 files changed

+295
-159
lines changed

spring-boot/src/main/java/org/springframework/boot/context/embedded/EmbeddedWebApplicationContext.java

Lines changed: 4 additions & 142 deletions
Original file line numberDiff line numberDiff line change
@@ -16,20 +16,10 @@
1616

1717
package org.springframework.boot.context.embedded;
1818

19-
import java.util.ArrayList;
2019
import java.util.Collection;
21-
import java.util.Collections;
22-
import java.util.Comparator;
2320
import java.util.EventListener;
24-
import java.util.LinkedHashMap;
25-
import java.util.LinkedHashSet;
26-
import java.util.List;
27-
import java.util.Map;
28-
import java.util.Map.Entry;
29-
import java.util.Set;
3021

3122
import javax.servlet.Filter;
32-
import javax.servlet.MultipartConfigElement;
3323
import javax.servlet.Servlet;
3424
import javax.servlet.ServletConfig;
3525
import javax.servlet.ServletContext;
@@ -41,7 +31,6 @@
4131
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
4232
import org.springframework.context.ApplicationContext;
4333
import org.springframework.context.ApplicationContextException;
44-
import org.springframework.core.annotation.AnnotationAwareOrderComparator;
4534
import org.springframework.core.io.Resource;
4635
import org.springframework.util.StringUtils;
4736
import org.springframework.web.context.ContextLoader;
@@ -94,7 +83,7 @@ public class EmbeddedWebApplicationContext extends GenericWebApplicationContext
9483
* default. To change the default behaviour you can use a
9584
* {@link ServletRegistrationBean} or a different bean name.
9685
*/
97-
public static final String DISPATCHER_SERVLET_NAME = "dispatcherServlet";
86+
public static final String DISPATCHER_SERVLET_NAME = ServletContextInitializerBeans.DISPATCHER_SERVLET_NAME;
9887

9988
private EmbeddedServletContainer embeddedServletContainer;
10089

@@ -220,108 +209,11 @@ public void onStartup(ServletContext servletContext) throws ServletException {
220209
/**
221210
* Returns {@link ServletContextInitializer}s that should be used with the embedded
222211
* Servlet context. By default this method will first attempt to find
223-
* {@link ServletContextInitializer} beans, if none are found it will instead search
224-
* for {@link Servlet} and {@link Filter} beans.
212+
* {@link ServletContextInitializer}, {@link Servlet}, {@link Filter} and certain
213+
* {@link EventListener} beans.
225214
*/
226215
protected Collection<ServletContextInitializer> getServletContextInitializerBeans() {
227-
228-
List<ServletContextInitializer> filters = new ArrayList<ServletContextInitializer>();
229-
List<ServletContextInitializer> servlets = new ArrayList<ServletContextInitializer>();
230-
List<ServletContextInitializer> listeners = new ArrayList<ServletContextInitializer>();
231-
List<ServletContextInitializer> other = new ArrayList<ServletContextInitializer>();
232-
Set<Servlet> servletRegistrations = new LinkedHashSet<Servlet>();
233-
Set<Filter> filterRegistrations = new LinkedHashSet<Filter>();
234-
Set<EventListener> listenerRegistrations = new LinkedHashSet<EventListener>();
235-
236-
for (Entry<String, ServletContextInitializer> initializerBean : getOrderedBeansOfType(ServletContextInitializer.class)) {
237-
ServletContextInitializer initializer = initializerBean.getValue();
238-
if (initializer instanceof ServletRegistrationBean) {
239-
servlets.add(initializer);
240-
ServletRegistrationBean servlet = (ServletRegistrationBean) initializer;
241-
servletRegistrations.add(servlet.getServlet());
242-
}
243-
else if (initializer instanceof FilterRegistrationBean) {
244-
filters.add(initializer);
245-
FilterRegistrationBean filter = (FilterRegistrationBean) initializer;
246-
filterRegistrations.add(filter.getFilter());
247-
}
248-
else if (initializer instanceof ServletListenerRegistrationBean) {
249-
listeners.add(initializer);
250-
listenerRegistrations
251-
.add(((ServletListenerRegistrationBean<?>) initializer)
252-
.getListener());
253-
}
254-
else {
255-
other.add(initializer);
256-
}
257-
}
258-
259-
List<Entry<String, Servlet>> servletBeans = getOrderedBeansOfType(Servlet.class);
260-
for (Entry<String, Servlet> servletBean : servletBeans) {
261-
final String name = servletBean.getKey();
262-
Servlet servlet = servletBean.getValue();
263-
if (!servletRegistrations.contains(servlet)) {
264-
String url = (servletBeans.size() == 1 ? "/" : "/" + name + "/");
265-
if (name.equals(DISPATCHER_SERVLET_NAME)) {
266-
url = "/"; // always map the main dispatcherServlet to "/"
267-
}
268-
ServletRegistrationBean registration = new ServletRegistrationBean(
269-
servlet, url);
270-
registration.setName(name);
271-
registration.setMultipartConfig(getMultipartConfig());
272-
registration.setOrder(CustomOrderAwareComparator.INSTANCE
273-
.getOrder(servlet));
274-
servlets.add(registration);
275-
}
276-
}
277-
278-
for (Entry<String, Filter> filterBean : getOrderedBeansOfType(Filter.class)) {
279-
String name = filterBean.getKey();
280-
Filter filter = filterBean.getValue();
281-
if (!filterRegistrations.contains(filter)) {
282-
FilterRegistrationBean registration = new FilterRegistrationBean(filter);
283-
registration.setName(name);
284-
registration.setOrder(CustomOrderAwareComparator.INSTANCE
285-
.getOrder(filter));
286-
filters.add(registration);
287-
}
288-
}
289-
290-
Set<Class<?>> listenerTypes = ServletListenerRegistrationBean.getSupportedTypes();
291-
for (Class<?> type : listenerTypes) {
292-
for (Entry<String, ?> listenerBean : getOrderedBeansOfType(type)) {
293-
String name = listenerBean.getKey();
294-
EventListener listener = (EventListener) listenerBean.getValue();
295-
if (ServletListenerRegistrationBean.isSupportedType(listener)
296-
&& !filterRegistrations.contains(listener)) {
297-
ServletListenerRegistrationBean<EventListener> registration = new ServletListenerRegistrationBean<EventListener>(
298-
listener);
299-
registration.setName(name);
300-
registration.setOrder(CustomOrderAwareComparator.INSTANCE
301-
.getOrder(listener));
302-
listeners.add(registration);
303-
}
304-
}
305-
}
306-
AnnotationAwareOrderComparator.sort(filters);
307-
AnnotationAwareOrderComparator.sort(servlets);
308-
AnnotationAwareOrderComparator.sort(listeners);
309-
AnnotationAwareOrderComparator.sort(other);
310-
311-
List<ServletContextInitializer> list = new ArrayList<ServletContextInitializer>(
312-
filters);
313-
list.addAll(servlets);
314-
list.addAll(listeners);
315-
list.addAll(other);
316-
return list;
317-
}
318-
319-
private MultipartConfigElement getMultipartConfig() {
320-
List<Entry<String, MultipartConfigElement>> beans = getOrderedBeansOfType(MultipartConfigElement.class);
321-
if (beans.isEmpty()) {
322-
return null;
323-
}
324-
return beans.get(0).getValue();
216+
return new ServletContextInitializerBeans(getBeanFactory());
325217
}
326218

327219
/**
@@ -375,25 +267,6 @@ protected void prepareEmbeddedWebApplicationContext(ServletContext servletContex
375267
}
376268
}
377269

378-
private <T> List<Entry<String, T>> getOrderedBeansOfType(Class<T> type) {
379-
List<Entry<String, T>> beans = new ArrayList<Entry<String, T>>();
380-
Comparator<Entry<String, T>> comparator = new Comparator<Entry<String, T>>() {
381-
@Override
382-
public int compare(Entry<String, T> o1, Entry<String, T> o2) {
383-
return AnnotationAwareOrderComparator.INSTANCE.compare(o1.getValue(),
384-
o2.getValue());
385-
}
386-
};
387-
String[] names = getBeanFactory().getBeanNamesForType(type, true, false);
388-
Map<String, T> map = new LinkedHashMap<String, T>();
389-
for (String name : names) {
390-
map.put(name, getBeanFactory().getBean(name, type));
391-
}
392-
beans.addAll(map.entrySet());
393-
Collections.sort(beans, comparator);
394-
return beans;
395-
}
396-
397270
private void startEmbeddedServletContainer() {
398271
if (this.embeddedServletContainer != null) {
399272
this.embeddedServletContainer.start();
@@ -448,15 +321,4 @@ public EmbeddedServletContainer getEmbeddedServletContainer() {
448321
return this.embeddedServletContainer;
449322
}
450323

451-
private static class CustomOrderAwareComparator extends
452-
AnnotationAwareOrderComparator {
453-
454-
public static CustomOrderAwareComparator INSTANCE = new CustomOrderAwareComparator();
455-
456-
@Override
457-
protected int getOrder(Object obj) {
458-
return super.getOrder(obj);
459-
}
460-
}
461-
462324
}

0 commit comments

Comments
 (0)