diff --git a/org.springframework.context/src/main/java/org/springframework/context/ApplicationContextInitializer.java b/org.springframework.context/src/main/java/org/springframework/context/ApplicationContextInitializer.java
index aa50b4cc3a..63a68446b7 100644
--- a/org.springframework.context/src/main/java/org/springframework/context/ApplicationContextInitializer.java
+++ b/org.springframework.context/src/main/java/org/springframework/context/ApplicationContextInitializer.java
@@ -27,16 +27,16 @@ package org.springframework.context;
* for declaring a "contextInitializerClasses" context-param and init-param, respectively.
*
*
{@code ApplicationContextInitializer} processors are encouraged to detect
- * whether Spring's {@link org.springframework.core.Ordered Ordered} or
- * {@link org.springframework.core.PriorityOrdered PriorityOrdered} interfaces are also
- * implemented and sort instances accordingly if so prior to invocation.
+ * whether Spring's {@link org.springframework.core.Ordered Ordered} interface has been
+ * implemented or if the @{@link org.springframework.core.annotation.Order Order}
+ * annotation is present and to sort instances accordingly if so prior to invocation.
*
* @author Chris Beams
* @since 3.1
* @see org.springframework.web.context.ContextLoader#customizeContext
* @see org.springframework.web.context.ContextLoader#CONTEXT_INITIALIZER_CLASSES_PARAM
* @see org.springframework.web.servlet.FrameworkServlet#setContextInitializerClasses
- * @see org.springframework.web.servlet.FrameworkServlet#initializeWebApplicationContext
+ * @see org.springframework.web.servlet.FrameworkServlet#applyInitializers
*/
public interface ApplicationContextInitializer {
diff --git a/org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/FrameworkServlet.java b/org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/FrameworkServlet.java
index d119b7c918..1de5eb4900 100644
--- a/org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/FrameworkServlet.java
+++ b/org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/FrameworkServlet.java
@@ -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> contextInitializers =
- new TreeSet>(new AnnotationAwareOrderComparator());
+ private ArrayList> contextInitializers =
+ new ArrayList>();
/**
@@ -652,6 +653,8 @@ public abstract class FrameworkServlet extends HttpServletBean {
}
}
+ Collections.sort(this.contextInitializers, new AnnotationAwareOrderComparator());
+
for (ApplicationContextInitializer initializer : this.contextInitializers) {
initializer.initialize(wac);
}
diff --git a/org.springframework.web/src/main/java/org/springframework/web/context/ContextLoader.java b/org.springframework.web/src/main/java/org/springframework/web/context/ContextLoader.java
index 7c8d5d2090..731e4b2047 100644
--- a/org.springframework.web/src/main/java/org/springframework/web/context/ContextLoader.java
+++ b/org.springframework.web/src/main/java/org/springframework/web/context/ContextLoader.java
@@ -18,6 +18,7 @@ package org.springframework.web.context;
import java.io.IOException;
import java.util.ArrayList;
+import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Properties;
@@ -36,8 +37,8 @@ import org.springframework.context.ApplicationContextInitializer;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.access.ContextSingletonBeanFactoryLocator;
import org.springframework.core.GenericTypeResolver;
-import org.springframework.core.OrderComparator;
import org.springframework.core.Ordered;
+import org.springframework.core.annotation.AnnotationAwareOrderComparator;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.support.PropertiesLoaderUtils;
import org.springframework.util.Assert;
@@ -348,7 +349,7 @@ public class ContextLoader {
}
catch (ClassNotFoundException ex) {
throw new ApplicationContextException(
- "Failed to load context configurer class [" + className + "]", ex);
+ "Failed to load context initializer class [" + className + "]", ex);
}
}
}
@@ -364,8 +365,9 @@ public class ContextLoader {
* {@linkplain #CONTEXT_INITIALIZER_CLASSES_PARAM context init parameters} and
* {@linkplain ApplicationContextInitializer#initialize invokes each} with the
* given web application context.
- * Any {@link Ordered} {@code ApplicationContextInitializer} will be sorted
- * appropriately.
+ *
Any {@code ApplicationContextInitializers} implementing
+ * {@link org.springframework.core.Ordered Ordered} or marked with @{@link
+ * org.springframework.core.annotation.Order Order} will be sorted appropriately.
* @param servletContext the current servlet context
* @param applicationContext the newly created application context
* @see #createWebApplicationContext(ServletContext, ApplicationContext)
@@ -373,7 +375,7 @@ public class ContextLoader {
* @see ApplicationContextInitializer#initialize(ConfigurableApplicationContext)
*/
protected void customizeContext(ServletContext servletContext, ConfigurableWebApplicationContext applicationContext) {
- List> initializerInstances =
+ ArrayList> initializerInstances =
new ArrayList>();
for (Class> initializerClass :
@@ -388,7 +390,7 @@ public class ContextLoader {
initializerInstances.add(BeanUtils.instantiateClass(initializerClass));
}
- OrderComparator.sort(initializerInstances);
+ Collections.sort(initializerInstances, new AnnotationAwareOrderComparator());
for (ApplicationContextInitializer initializer : initializerInstances) {
initializer.initialize(applicationContext);