引用官方的demo示例:
public class MyWebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
@Override
protected Class<?>[] getRootConfigClasses() {
return new Class<?>[] { RootConfig.class };
}
@Override
protected Class<?>[] getServletConfigClasses() {
return new Class<?>[] { App1Config.class };
}
@Override
protected String[] getServletMappings() {
return new String[] { "/app1/*" };
}
}
mvc-context-hierarchy.png
DispatcherServlet会形成两个父子容器:
Root WebApplicationContext(父容器:SpringIoc)负责包扫描所有组件(除springmvc的组件),例如:Services,Dao
Servlet WebApplicationContext(子容器:SpringWebIoc)负责包扫描与自身相关的,例如:Controller,HandlerMapping
子容器会先从自己的容器中寻找Bean组件,找不到才会到父容器中寻找。但是父容器无法到子容器寻找组件。
达到了容器隔离,互不影响的目的
springmvc准备阶段
DispatcherServlet.png
springmvc启动准备阶段.jpg
Servlet阶段是如何处理的请求呢?
servlet处理请求.png
springmvc如何处理请求?
DispatcherServlet处理请求.png
请求访问.png