springMVC源码阅读1
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 }