Spring作为一个IOC容器,今天我们学习它作为web解析的地方,学习下webmvc包的代码。
我们先看下web.xml
可以看到通过DispatcherServlet来实现页面的mapper处理。
DispatcherServlet->FrameworkServlet->HttpServletBean->HttpServlet
这是集成关系从HttpServletBean可以看出它是一个httpservlet ,
我们看下HttpServletBean的init方法
可以看到初始化方法在initServletBean中。我们继续看下FrameworkServlet中的initServletBean
我们看下DispatcherServlet的onRefresh
我们发现在这里进行了初始化,重点分析下initHandlerMappings方法
可以看到把所有的handlemapping都放到map中。
我们在看处理的地方
我们看下lookupHandlerMethod 这个方法
看到这里我也蒙圈了。这mappingRegistry玩意才是关键。
打开InitializingBean 发现这个接口的唯一方法是afterPropertiesSet。很显然spring又在构造方法埋点了。
可以看到根据url从handlerMap 得到处理的bean对应的method方法.
我们继续看下处理的地方
异步处理下。