最近一直在做源码研读和翻译:确实收获了很多;源码的研读是枯燥痛苦的,但取得阶段性成果的时候是快乐的;
今天我要说的是web服务器,到springmvc框架以及spring框架+mybatis框架
tomcat接收到socket[endpoint]请求后寻找mapper处理->找到相应的container处理【engine->host->context->wrapper】
网络请求的核心是socket;
大白话说:[如果你不理解tomcat核心实现]
1tomcat启动时加载所有组件
并且该组件 端到端的核心就是 socket ---mapper --- servlet
根据controller等注解建立mapper信息
socket请求根据url->mapper找到servlet的方法,执行请求
返回结果
springmvc如何整合tomcat,tomcat定义了一套网络资源处理标准,servlet,spring继承该标准实现了DispatcherServlet
当从tomcat进入spring-mvc后就由spring自己解析了,也就是常见的面试题,mvc的核心处理[适配器处理器 modelAndView等等]
如此springmvc就连接上了tomcat
2再来看spring-mvc怎么连接spring
1springmvc是无缝连接spring
在结合tomcat时候会把整套容器注入给tomcat
web.xml中ContextLoaderListener就是干这个事情的;他会将springcontext[spring]注入到servletContext[tomcat]
注意spring 容器和tomcat容器的不同 spring容器注重的是bean的控制反转,tomcat容器注重的是提供url的黑箱处理返回结果;
2再看spring容器,
spring的核心是IOC启动
主要就是加载相关bd 扫描 处理扩展点[BFPP[BDRPP],,BPP],单例bean创建 ioc处理
核心就是refresh
3那么mybatis如何整合spring
先说 mybatis几个核心 的configuration sqlsessionFactoryBean ,MapperScannerRegistrar @MapperScan
mybatis借助的正是spring的扩展点ImportBeanDefinitionRegistrar实现了对接口的封装处理
在创建接口代理对象的时候赋值session[也是个代理,真正实现还是DefaultsqlSession];
当session拿着原生接口的sql去执行的时候就完成了数据库查询
至于如果查session下面交给了【executor 和几大handler以及额外的插件处理】
综上所述,我们看看现阶段开发的整个流程
tomcat启动加载spring,创建socket到servlet的映射,spring在启动会扫描所有的bean包含myabtis,并且完成iDI注入,mybatis通过过mapperscan结合了spring IBDR注入到spring容器从而注入给tomcat
用户发起socket请求通过tomcat的mapper找到servlet,servlet通过自己的mapper找到controller,contoller调用service调用dao代理对象,代理对象执行的时候通过 mapperProxy.invoker执行【executor->【statementhandler->...->resultHandler】】
接下来从源码涉及的类概述启动解析以及请求过程
太晚,待写