package com.db.common.config;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
public class AppWebInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
//加载model
@Override
protected Class<?>[] getRootConfigClasses() {
System.out.println("getRootConfigClasses");
return new Class[]{AppRootConfig.class};
}
//官方建议在此方法中加载View,Controller
@Override
protected Class<?>[] getServletConfigClasses() {
System.out.println("getServletConfigClasses");
return new Class[]{AppMvcConfig.class};
}
//定义请求映射
@Override
protected String[] getServletMappings() {
System.out.println("getServletMappings");
return new String[]{"*.do"};
}
}
为什么自己写的AppWebInitializer类继承了AbstractAnnotationConfigDispatcherServletInitializer就会被加载呢?这是Servlet3.0之后的规范,会自动读取。加载javax.servlet.ServletContainerInitializer文件中的类。由tomcat构建文件中类的对象 ,并调用onStartup方法。spring中就是这样玩的。
spring的SpringServletContainerInitializer上面的注解@HandlesTypes(WebApplicationInitializer.class),会把WebApplicationInitializer.class的子类传递给onStartup方法