04Spring MVC时序图分析
SpringMVC请求流程图:
SpringMVC源码时序图
MVC初始化部分:
org.springframework.web.servlet.HttpServletBean#init
org.springframework.web.servlet.FrameworkServlet#initWebApplicationContext
org.springframework.web.servlet.FrameworkServlet#configureAndRefreshWebApplicationContext
org.springframework.context.support.AbstractApplicationContext#refresh
回调:
org.springframework.web.servlet.DispatcherServlet#onRefresh
MVC执行部分:
org.springframework.web.servlet.DispatcherServlet#doService
org.springframework.web.servlet.DispatcherServlet#doDispatch
获取handlerChain:
org.springframework.web.servlet.DispatcherServlet#getHandler
获取adapter:
org.springframework.web.servlet.DispatcherServlet#getHandlerAdapter
执行:
org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter#handle
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter#invokeHandlerMethod
执行完成后返回mv:
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter#getModelAndView
处理mv:
org.springframework.web.servlet.DispatcherServlet#processDispatchResult
org.springframework.web.servlet.DispatcherServlet#render
输出数据到浏览器:
org.springframework.web.servlet.view.AbstractView#render
SpringMVC使用建议:
1、Controller如果能保持单例,尽量使用单例!
2、处理Request的方法中的形参务必加上@RequestParam注解!提升解析参数效率!直接对号入座!
3、缓存URL!Spring没有对url进行缓存,每次请求进来都要根据url去匹配Method!