源码入口
-
HttpServletBean类调用了 Init初始化 方法 改方法中 最为重点的方法是initServletBean方法
-
initServletBean方法是在FrameworkServlet类中实现的 该方法中最为重要的方法为initWebApplicationContext 初始化webApplication
-
initWebApplicationContext方法中 最为两个重要的方法:initWebApplicationContext(此方法调用了AbstatctApplication中的refresh 初始化ioc)
-
initWebApplicationContext 方法还会调用onRefresh()方法 此方法会去
回调DispatcheServelet 中的initStrategies方法 去初始化mvc的九大组件
接下来是mvc的调用阶段 同样我们从入口开始
-
mvc的调用阶段如果 是从DispatcherServlet类中的doService方法中执行的
-
doService中最为主要的方法是doDispatch()方法
-
doDispatch方法中分为四个重要的步骤
①.checkMultipart(request) :检查是否为上传文件的请求②.getHandler(processedRequest): 取得处理当前请求的hanlder,处理器(controller) 这里返回的是一个HandlerExecutionChain请求处理器链对象该对象封装了handler和interceptors
③.getHandlerAdapter(mappedHandler.getHandler()); 获取处理request的处理器适配器handler adapter
④.ha.handle(processedRequest, response, mappedHandler.getHandler()): 返回视图结果的处理
其中也需要注意的一个方法是mappedHandler.applyPreHandle拦截处理
- 回到 初始化mvc的九大组件 其中initHandlerMappings初始化 HandlerMapping
initHandlerMappingsw调用了BeanFactoryUtils.beansOfTypeIncludingAncestors 获取一个map 其中key是Handler名称,value是HandlerMapping 之后操作把map中的value值取出来 然后存进list中 去排序