Sort WebApplicationInitializers properly

Issue: SPR-7672
This commit is contained in:
Chris Beams 2011-05-31 01:12:34 +00:00
parent 0067618b35
commit 847b54f3b1
1 changed files with 8 additions and 8 deletions

View File

@ -19,9 +19,10 @@ package org.springframework.web;
import static org.springframework.beans.BeanUtils.instantiateClass; import static org.springframework.beans.BeanUtils.instantiateClass;
import java.lang.reflect.Modifier; import java.lang.reflect.Modifier;
import java.util.ArrayList;
import java.util.Collections;
import java.util.ServiceLoader; import java.util.ServiceLoader;
import java.util.Set; import java.util.Set;
import java.util.TreeSet;
import javax.servlet.ServletContainerInitializer; import javax.servlet.ServletContainerInitializer;
import javax.servlet.ServletContext; import javax.servlet.ServletContext;
@ -136,23 +137,22 @@ public class SpringServletContainerInitializer implements ServletContainerInitia
public void onStartup(Set<Class<?>> webAppInitializerClasses, public void onStartup(Set<Class<?>> webAppInitializerClasses,
ServletContext servletContext) throws ServletException { ServletContext servletContext) throws ServletException {
Set<WebApplicationInitializer> initializers = ArrayList<WebApplicationInitializer> initializers = new ArrayList<WebApplicationInitializer>();
new TreeSet<WebApplicationInitializer>(new AnnotationAwareOrderComparator());
for (Class<?> waiClass : webAppInitializerClasses) { for (Class<?> waiClass : webAppInitializerClasses) {
if (Modifier.isAbstract(waiClass.getModifiers())) { if (!Modifier.isAbstract(waiClass.getModifiers())) {
// the class is not instantiable (i.e. abstract or an interface) -> skip it // the class can be instantiated -> add it
continue;
}
initializers.add(instantiateClass(waiClass, WebApplicationInitializer.class)); initializers.add(instantiateClass(waiClass, WebApplicationInitializer.class));
} }
}
if (initializers.isEmpty()) { if (initializers.isEmpty()) {
logger.info("Detected no WebApplicationInitializer types on the classpath: exiting."); logger.info("Detected no WebApplicationInitializer types on the classpath: exiting.");
return; return;
} }
Collections.sort(initializers, new AnnotationAwareOrderComparator());
logger.info("Delegating ServletContext to the following " + logger.info("Delegating ServletContext to the following " +
"WebApplicationInitializer instances: " + initializers); "WebApplicationInitializer instances: " + initializers);