Improve ApplicationContextInitializer sorting

ContextLoader and FrameworkServlet now use
AnnotationAwareOrderComparator to support @Order usage; previously
supported only implementation of the Ordered interface.
This commit is contained in:
Chris Beams
2011-05-30 12:55:33 +00:00
parent 2eea63eec5
commit 2b4328023e
3 changed files with 18 additions and 13 deletions

View File

@@ -18,7 +18,8 @@ package org.springframework.web.servlet;
import java.io.IOException;
import java.security.Principal;
import java.util.TreeSet;
import java.util.ArrayList;
import java.util.Collections;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
@@ -184,8 +185,8 @@ public abstract class FrameworkServlet extends HttpServletBean {
private String contextInitializerClasses;
/** Actual ApplicationContextInitializer instances to apply to the context */
private TreeSet<ApplicationContextInitializer<ConfigurableApplicationContext>> contextInitializers =
new TreeSet<ApplicationContextInitializer<ConfigurableApplicationContext>>(new AnnotationAwareOrderComparator());
private ArrayList<ApplicationContextInitializer<ConfigurableApplicationContext>> contextInitializers =
new ArrayList<ApplicationContextInitializer<ConfigurableApplicationContext>>();
/**
@@ -652,6 +653,8 @@ public abstract class FrameworkServlet extends HttpServletBean {
}
}
Collections.sort(this.contextInitializers, new AnnotationAwareOrderComparator());
for (ApplicationContextInitializer<ConfigurableApplicationContext> initializer : this.contextInitializers) {
initializer.initialize(wac);
}