1 @HandlesTypes(WebApplicationInitializer.class)
2 public class SpringServletContainerInitializer implements ServletContainerInitializer {
3 @Override
4 public void onStartup(@Nullable Set<Class<?>> webAppInitializerClasses, ServletContext servletContext)
5 throws ServletException {
6
7 List<WebApplicationInitializer> initializers = new LinkedList<>();
8
9 if (webAppInitializerClasses != null) {
10 for (Class<?> waiClass : webAppInitializerClasses) {
11 // Be defensive: Some servlet containers provide us with invalid classes,
12 // no matter what @HandlesTypes says...
13 if (!waiClass.isInterface() && !Modifier.isAbstract(waiClass.getModifiers()) &&
14 WebApplicationInitializer.class.isAssignableFrom(waiClass)) {
15 try {
16 initializers.add((WebApplicationInitializer)
17 ReflectionUtils.accessibleConstructor(waiClass).newInstance());
18 }
19 catch (Throwable ex) {
20 throw new ServletException("Failed to instantiate WebApplicationInitializer class", ex);
21 }
22 }
23 }
24 }
25
26 if (initializers.isEmpty()) {
27 servletContext.log("No Spring WebApplicationInitializer types detected on classpath");
28 return;
29 }
30
31 servletContext.log(initializers.size() + " Spring WebApplicationInitializers detected on classpath");
32 AnnotationAwareOrderComparator.sort(initializers);
33 for (WebApplicationInitializer initializer : initializers) {
34 initializer.onStartup(servletContext);
35 }
36 }
37
38 }