mybatis请求流程
1. 目录[TOC] 2. 说明mybatis的请求流程分为带事务的请求和不带事务的请求,其在事务提交、关闭上略有不同,其余流程均差不多 StatementHandler、ExecutionHandler、ParaedmentHandler3. 依赖分析4. 源码分析前面已经分析到实际注入的Mapper为MapperProxy代理对象,因此,我们的调用从MapperProxy开始 MapperProxy由于实现了jdk动态代理,进入方法首先分析invoke()方法 1234567891011121314151617181920212223242526272829303132333435public class MapperProxy<T> implements InvocationHandler, Serializable { private static final long serialVersionUID = -6424540398559729838L; private final SqlSession sqlSession; private...
mybatis启动流程(springboot)
1. 目录[TOC] 2. 说明本文分析mybatis在springboot 启动条件下的启动流程 3. 依赖分析maven依赖项目启动依赖123456789101112<dependencies> <!--mybatis启动器--> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> </dependency> <!--mysql连接,没有这个spring提供的的Datasource是不会创建的--> <dependency> <groupId>mysql</groupId> ...
Springboot springboot生命周期扩展
1. 说明springboot的生命周期主要在springboot启动容器阶段的扩展,从容器刷新开始主要就是spring相关的扩展了 看过springboot源码就应该知道,我们从pringApplication.run()启动springboot工程,其有一个初始化器、监听器、一个异常报告器同时,springboot还支持在启动之后执行初始化方法,相当于在容器启动之后执行方法, 防止方法报错导致容器起不来 2. 扩展2.1. 初始化器ApplicationContextInitializer初始化器在上下文设置好环境变量之后执行,在这里可以操作环境变量相关信息;实际上类信息是spring的相关扩展,只是springboot在启动时会加载这个扩展 ApplicationContextInitializer有道翻译:这里封装了配置和生命周期方法,以避免让ApplicationContext客户端代码明显看到它们。目前的方法应该只用于启动和关闭代码。 2.1.1....
6 springmvc请求访问流程
1. 目录[TOC] 2. 说明springmvc的访问流程主要从DispatcherServlet#doDispatch开始的,Tomcat:org.apache.catalina.ApplicationFilterChain#coreApplicationFilterChain() -> Java:javax.servlet.http.HttpServlet#service()-> springmvc:FrameworkServlet#Service -> springmvc:DistpatcherServlet#doDispatch() 3. 依赖分析4. 源码分析主要是从DistpatcherServlet#doDispathcer()开始正式进入流程 4.1....
1 springboot启动流程分析
1. 目录[TOC] 2. 说明springboot 是一个脚手架,主要用于初始化spring相关的配置,以及根据约定的格式快速配置约定优于配置是其主要思想 3. 依赖分析4. 源码分析4.1. 主入口SpringApplication.run()123public static void main(String[] args) { SpringApplication.run(D7SpringbootSourceApp.class, args);} 直接进入SpringApplication创建 1234567public static ConfigurableApplicationContext run(Class<?> primarySource, String... args) { return run(new Class<?>[] { primarySource }, args);}public static ConfigurableApplicationContext...
5 springmvc初始化拦截器Interceptor
1. 目录[TOC] 2. 说明前面springmvc启动流程已经分析到了拦截器是使用InterceptorsBeanDefinitionParser解析器来解析的 3. 依赖分析4. 源码分析4.1. xml说明在spring中配置了<mvc:interceptors> 标签的会在此解析器中解析得到MappedInterceptor包装类解析器支持解析三种标签bean,ref,interceptor,从后面源码可以看出来 12345678910111213<mvc:interceptors> <!--在这里创建一个拦截器bean--> <bean class="com.kewen.interceptor.GlobalInterceptor"/> <!--引用已有的bean--> <ref bean="globalInterceptor"/> <!--配置条件拦截器--> <mvc:interceptor> ...
3 springmvc初始化请求适配器HandlerAdaptor
1. 目录[TOC] 2. 说明请求适配器主要是处理返回数据的格式问题,即Controller返回的数据对象是视图还是数据,或对数据格式化等 3. 依赖分析4. 源码分析从springmvc启动流程可以知道,springmvc请求适配是在initHandlerAdapters()中初始化的 4.1. initHandlerAdapters()123456789101112131415161718192021222324252627282930313233private void initHandlerAdapters(ApplicationContext context) { this.handlerAdapters = null; if (this.detectAllHandlerAdapters) { //从容器中获取到对应的适配器(其默认加载位置同HandlerMapping一样,当配置<mvc:annotation-driven>的时候会加载默认,没有配置注解驱动,查询出来为空,...
4 springmvc初始化异常解析器HandlerExceptionResolver
1. 目录[TOC] 2. 说明异常解析器在发生异常的时候解析组装异常返回 3. 依赖分析4. 源码分析初始化异常解析器依然是在DispatchServlet#initStrategies()中完成的,方法为initHandlerExceptionResolvers() 4.1. initHandlerExceptionResolvers()和前面一样,当配置<mvc:annotation-driven>的时候会加载默认,没有配置注解驱动,查询出来为空, 则会走后面getDefaultStrategies() 123456789101112131415161718192021222324252627282930313233private void initHandlerExceptionResolvers(ApplicationContext context) { this.handlerExceptionResolvers = null; if (this.detectAllHandlerExceptionResolvers) { ...
1 springmvc启动流程
1. 目录[TOC] 2. 说明本文分析springmvc的启动过程,spring的启动前面已经分析了,此处就默认spring启动流程已经OK 3. 流程分析 首先spring通过 ContextLoaderListener实现tomcat调用的javax.util.EventListener.ServletContextListener来启动spring容器ApplicationContext 启动完成后继续执行tomcat的方法 然后 springmvc 通过 DispatcherServlet实现tomcat 的HttpServlet来启动spring-mvc的容器ApplicationContext,初始化完成之前会创建初始化完成事件监听器, springmvc监听事件,容器初始化后执行监听方法,初始化springmvc的九大组件 4. 源码分析4.1. spring...
2 springmvc初始化请求映射器handlerMappiings
1. 目录[TOC] 2. 说明请求映射器主要是将url映射成应用中的执行对象,一般我们项目中是通过RequestMappingHandlerMapping映射Controller 3. 依赖分析4. 源码分析从springmvc启动流程可以知道,springmvc请求映射是在initHandlerMappings()中初始化的 4.1. initHandlerMappings()1234567891011121314151617181920212223242526272829303132333435private void initHandlerMappings(ApplicationContext context) { this.handlerMappings = null; //是否检测容器中的bean,默认为true if (this.detectAllHandlerMappings) { ...
