@@ -225,27 +225,35 @@ public void onStartup(ServletContext servletContext) throws ServletException {
225
225
*/
226
226
protected Collection <ServletContextInitializer > getServletContextInitializerBeans () {
227
227
228
- Set <ServletContextInitializer > initializers = new LinkedHashSet <ServletContextInitializer >();
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 >();
229
232
Set <Servlet > servletRegistrations = new LinkedHashSet <Servlet >();
230
233
Set <Filter > filterRegistrations = new LinkedHashSet <Filter >();
231
234
Set <EventListener > listenerRegistrations = new LinkedHashSet <EventListener >();
232
235
233
236
for (Entry <String , ServletContextInitializer > initializerBean : getOrderedBeansOfType (ServletContextInitializer .class )) {
234
237
ServletContextInitializer initializer = initializerBean .getValue ();
235
- initializers .add (initializer );
236
238
if (initializer instanceof ServletRegistrationBean ) {
239
+ servlets .add (initializer );
237
240
ServletRegistrationBean servlet = (ServletRegistrationBean ) initializer ;
238
241
servletRegistrations .add (servlet .getServlet ());
239
242
}
240
- if (initializer instanceof FilterRegistrationBean ) {
243
+ else if (initializer instanceof FilterRegistrationBean ) {
244
+ filters .add (initializer );
241
245
FilterRegistrationBean filter = (FilterRegistrationBean ) initializer ;
242
246
filterRegistrations .add (filter .getFilter ());
243
247
}
244
- if (initializer instanceof ServletListenerRegistrationBean ) {
248
+ else if (initializer instanceof ServletListenerRegistrationBean ) {
249
+ listeners .add (initializer );
245
250
listenerRegistrations
246
251
.add (((ServletListenerRegistrationBean <?>) initializer )
247
252
.getListener ());
248
253
}
254
+ else {
255
+ other .add (initializer );
256
+ }
249
257
}
250
258
251
259
List <Entry <String , Servlet >> servletBeans = getOrderedBeansOfType (Servlet .class );
@@ -261,7 +269,9 @@ protected Collection<ServletContextInitializer> getServletContextInitializerBean
261
269
servlet , url );
262
270
registration .setName (name );
263
271
registration .setMultipartConfig (getMultipartConfig ());
264
- initializers .add (registration );
272
+ registration .setOrder (CustomOrderAwareComparator .INSTANCE
273
+ .getOrder (servlet ));
274
+ servlets .add (registration );
265
275
}
266
276
}
267
277
@@ -271,7 +281,9 @@ protected Collection<ServletContextInitializer> getServletContextInitializerBean
271
281
if (!filterRegistrations .contains (filter )) {
272
282
FilterRegistrationBean registration = new FilterRegistrationBean (filter );
273
283
registration .setName (name );
274
- initializers .add (registration );
284
+ registration .setOrder (CustomOrderAwareComparator .INSTANCE
285
+ .getOrder (filter ));
286
+ filters .add (registration );
275
287
}
276
288
}
277
289
@@ -285,12 +297,23 @@ protected Collection<ServletContextInitializer> getServletContextInitializerBean
285
297
ServletListenerRegistrationBean <EventListener > registration = new ServletListenerRegistrationBean <EventListener >(
286
298
listener );
287
299
registration .setName (name );
288
- initializers .add (registration );
300
+ registration .setOrder (CustomOrderAwareComparator .INSTANCE
301
+ .getOrder (listener ));
302
+ listeners .add (registration );
289
303
}
290
304
}
291
305
}
292
-
293
- return initializers ;
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 ;
294
317
}
295
318
296
319
private MultipartConfigElement getMultipartConfig () {
@@ -425,4 +448,15 @@ public EmbeddedServletContainer getEmbeddedServletContainer() {
425
448
return this .embeddedServletContainer ;
426
449
}
427
450
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
+
428
462
}
0 commit comments