- 博客(31)
- 收藏
- 关注
原创 SpringMVC源码剖析之自动注入Request,Response
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言 一、pandas是什么? 二、使用步骤 1.引入库 2.读入数据 总结前言 我们在使用SpringMvc处理请求的时候,可以在controller层或者service层注入HttpServletRequest对象,controller是一个单例对象,在容器初始化的过程中会对其进行属性注入,然而httprequest是随着每次请求的变化而变化的,所以基本不可能在初始化的时候得....
2022-05-16 22:11:25
1603
原创 全文索引在同一事务中不生效
beginupdate phone set unique_er = 16523456789 where id = 662141370select * from phone where match(unique_er) against (16523456789)commit插入数据之后,再根据全文索引查询是不可以的。
2022-04-18 22:14:29
221
原创 JWT单点登录源码分析
目录前言一、创建token二、验证token总结前言 JWT在创建的token由header、payload和signature三部分组成,每一部分使用"."分隔,其中header中存储加密的模型,payload中存储需要传输的信息和过期时间等,signature中存储加密后的字符串,使用base64编码提高安全性。在校验的时候也是根据上述规则进行分割,分别进行校验。一、创建token 在项目中,我们通过调用JWT.create.sign()方...
2021-10-12 21:29:04
8038
原创 Feign源码解析
目录前言一、EnableFeignClients二、FeignClientsRegistrar三、FeignClientFactoryBean四、FeignInvocationHandler五、动态URI参数总结前言 Feign作为调用http请求的工具,在java后端编程中有广泛的应用,能够简化代码书写,但同时也隐藏了大量的处理细节,作为开发者,应当适当了解其源码,解决开发中的问题。一、EnableFeignClients ...
2021-09-27 20:50:01
623
原创 springcloud中zuul网关源码分析
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言 一、pandas是什么? 二、使用步骤 1.引入库 2.读入数据 总结前言在这中秋佳节之际,身为单身狗总要写点什么记录一下。今天主要分析一下springmvc中的AbstractHandlermapping源码。提示:以下是本篇文章正文内容,下面案例可供参考一、pandas是什么?示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。二、
2021-09-23 21:16:52
486
原创 spring aop源码分析
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言 一、pandas是什么? 二、使用步骤 1.引入库 2.读入数据 总结前言 aop作为spring的两大特性之一,广泛应用于日志记录,异常捕获等,在使用动态数据源的时候还可以通过拦截,将注解中的值设置到threadlocal中。本文基于源码分析aop动态代理的创建和运行流程。一、EnableAspectJAutoProxy 首先从EnableAspect......
2021-07-30 14:05:53
303
原创 FutureTask源码解析
目录前言二、运行流程分析1.run2.get3.cancel4.runAndReset三、ListenableFutureTask总结前言 实现了Runnable接口的类能够新建线程运行,Future接口规范了线程的生命周期,Callable接口能够获得方法的返回值。FutureTask实现了Runnable和Future接口,同时有Callable属性,能够实现三者的功能。一、状态 FutureTask有NEW,COMPLETING...
2021-07-19 21:52:45
340
原创 springboot自动装配源码分析
目录前言一、自动装配类的加载过程二、自动加载属性总结前言 springboot提供了自动装配的功能,简化了配置。自动装配应该包含配置类的导入和属性的赋值两个过程,本文基于源码分析这两个过程。一、自动装配类的加载过程 首先从SpringBootApplocation注解进行分析,包含了EnableAutoConfiguration注解,在该注解中引入了AutoConfigurationImportSelector类,该类实现了DeferredImport...
2021-07-15 20:04:53
153
原创 tomcat线程池源码
目录前言一、ThreadPoolExecutor二、TaskQueue总结前言 jdk的原生线程池会尽量保证核心线程数的线程运行,但对于io密集型任务,应尽量使用更多的线程,tomcat对线程池进行了扩展,本文主要针对tomcat线程池源码中的重点内容进行分析。一、ThreadPoolExecutor 在tomcat的ThreadPoolExecutor中,对execute方法进行了重写,在当前任务被线程池拒绝时,会再次尝试将任务加入到等待队列中,尽...
2021-07-13 19:33:12
526
原创 Mybatis的运行流程源码分析
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言 一、pandas是什么? 二、使用步骤 1.引入库 2.读入数据 总结前言提本文以查询的情况为例,主要分析mybatis的处理过程。mybatis处理增删改查主要分为了select和update两种方式,insert和delete操作也使用update操作进行处理。提示:以下是本篇文章正文内容,下面案例可供参考一、pandas是什么?示例:pandas 是基于NumPy 的一
2021-07-12 20:25:35
281
原创 Mybatis拦截器源码分析
目录前言一、interceptor的加载过程二、代理对象创建1.Configuration类2.pluginAll3.wrap三、代理对象调用总结前言 Mybatis的拦截器可以实现记录日志,sql拦截等功能,作为一个常用的插件,我们有必要了解其运行的原理。本文基于原始的mybatis,没有结合spring,主要从源码角度分析interceptor的运行原理,主要包括了拦截器的加载,代理对象的创建和调用过程。一、interceptor的加载过程...
2021-07-09 21:35:03
273
原创 Mybatis结果集处理DefaultResultSetHandler源码分析
目录前言1.handleResultSets2.handleResultSet3.getRowValue4.applyPropertyMappings总结前言 Mybatis使用PreparedStatement查询之后,会将结果存储到PreparedStatement中,接下来的过程是将其中的resultset取出,并转化成对应的java返回对象,本文主要针对这个过程展开分析,只是针对了特定情况,没有覆盖全部情况。1.handleResultSets...
2021-07-08 21:23:52
908
原创 Mybatis中#{}和${}源码解析
目录前言一、初步解析1.getBoundSql2.parse3.handleToken二、parameterMappings解析1.setParameters2.防止sql注入总结前言 使用#能防止sql注入,这是一个共识,但是为什么#能够做到,却很难说的清。本文主要分析#{}和${}的解析过程,从源码层次上解释#防止sql注入的原因。一、初步解析1.getBoundSql 在CachingExecutor的query方法中,...
2021-07-07 17:26:57
932
原创 mybatis-spring启动流程源码
目录前言二、扫描Mapper接口,注册Bean定义1.@MapperScan2.MapperScannerConfigurer三、实例化MapperFactoryBean总结前言 在上一篇文章中分析了mybatis的启动流程,主要包括SqlSessionFactory的创建和configure配置文件的解析,然后是sqlSession的创建,最后完成了mapper动态代理对象的创建,本文主要分析在有spring参与的情况下,mybatis的启动流程。一、启动配...
2021-07-05 20:46:39
324
原创 mybatis的启动流程源码
目录前言一、主程序二、SqlSessionFactory创建1.SqlSessionFactory的创建过程2.mapper.xml加载3.解析xml文件对应的接口三、SqlSession创建四、Mapper代理对象创建总结前言 mybatis的启动流程主要包括sqlSessionFactory,selSession和mapper代理对象的创建,本文将从源码角度分析,在接下来的文章中还会分析在spring参与的情况下启动流程的变化。一、主程序...
2021-07-02 18:42:30
192
原创 ThreadPoolExecutor线程池相关源码分析
目录前言一、线程池状态二、Worker类三、线程池运行过程1.execute2.addWorker3.runWorker4.getTask5.processWorkerExit四、关闭线程池总结前言 线程池在java编程中的应用十分广泛,本文从源码上分析线程池运行原理,从任务的提交,运行直到任务结束,线程池销毁。一、线程池状态 线程池有running,shutdown,stop,tidying和terminated五种状态...
2021-06-29 17:37:21
96
原创 基于Apollo动态修改日志级别
目录前言一、日志的自动配置过程二、动态修改日志级别1.日志修改类2.Apollo监听器总结前言 昨天组内有人反映说系统的日志级别在Apollo中配置了没有生效,在默认的properties文件中配置了会生效,这就有点意思了。在前面的文章中我们分析过,Apollo属性的优先级是高于properties文件,如果二者同时存在,应该以Apollo中的属性为准,那么最有可能的是在该属性作用的位置,Apollo属性还没有加载进来,默认的properties文件已经加载。...
2021-06-25 18:28:33
1385
原创 spring中属性注入相关源码分析
目录前言一、整体流程二、findAutowiringMetadata三、inject1.整体流程2.@Value注解解析过程3.@Autowired注解解析过程四、@Lazy注解的作用总结前言 spring使用@Autowired和@Value实现了属性的注入,本文重点分析两种注入方式的源码,然后说明@Lazy注解在属性注入时的作用,将上篇文章中的遗留问题解答。一、整体流程 对@Value和@Autowired注解的处理...
2021-06-19 14:48:41
365
原创 spring中循环依赖源码分析
目录前言一、三级缓存二、bean的创建过程三、循环依赖四、aop代理的影响五、async代理的影响总结前言本篇文章主要分析bean的创建过程和循环依赖的相关源码,并针对aop代理和async代理进行了重点分析,为了解决async代理存在的问题,涉及到@Lazy相关的内容,会在以后的文章中分析。一、三级缓存spring中有三级缓存,一级缓存存储初始化完成的对象,二级缓存存储循环依赖存在时暴露的早期对象,三级缓存存储对象实例化之后提供的获取对象的方法,同时对于aop.
2021-06-17 20:52:25
181
原创 spring中异步任务源码分析
目录前言一、@EnableAsync二、AsyncAnnotationBeanPostProcessor三、AsyncExecutionInterceptor四、自定义异步线程池总结前言在spring框架中,我们可以使用async注解实现方法的异步执行,但是如果不了解内部源码的运行机制,也会导致很多问题,比如默认线程池的问题,async导致循环依赖报错的问题等,本篇文章主要分析async任务执行的全流程,并给出自定义异步线程池的方法,关于循环依赖相关内容会在下篇文章中给出。.
2021-06-16 13:48:45
423
原创 spring中定时任务相关源码分析
目录前言一、EnableScheduling二、ScheduledAnnotationBeanPostProcessor1.postProcessAfterInitialization2.finishRegistration3.ReschedulingRunnable三、自定义任务线程池和定时任务总结前言spring中提供了定时任务的功能,简化了一些重复执行任务的编写过程,但同时也将内部细节隐藏了起来,因此,熟悉相关源码是必要的。定时任务的执行过程基本都是在Sched
2021-06-11 20:29:58
571
原创 spring和mybatis的事务相关源码分析
目录前言一、collection的获取过程二、sqlsession的相关源码分析1.整体流程2.sqlsession的获取3.sqlsession的提交方法总结前言在有事务的情况下,为了保证事务的特性,spring和mybatis结合的过程做了哪些处理呢?本文从源码上分析,首先分析如何保证spring和mybatis获取connection的一致性,然后分析sqlsession获取的过程以及带来的影响。一、collection的获取过程在有spring事务参与的情
2021-06-07 17:54:44
272
原创 spring事务的传播机制源码分析
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档目录前言一、传播事务建立过程二、事务唤醒步骤总结前言本文主要从源码角度分析事务的传播机制的实现原理,理解有限,欢迎交流。一、传播事务建立过程首先分析一下事务传播机制的建立的大致流程,主要是在有外层事务的情况下,对外层事务是否挂起,是否创建并开启新的事务,其中的suspend方法比较重要,是将外层事务的一些属性记录下来并返回,最终写入到新的事务中,方便在内层事务运行结束后再次执行外层事务。 pr.
2021-06-06 11:32:37
235
原创 spring事务相关源码分析
目录前言二、创建事务1.总体流程2.获取事务二、事务回滚三、提交事务总结前言spring的事务和mybatis有什么关系,如何实现的提交和回滚,隔离级别和传播机制如何发挥作用,这一切的答案都将在本文揭晓,本文主要集中与事务相关的运行流程,关于容器启动过程中的事务相关配置过程没有涉及,以后有时间再说吧。一、事务执行的总体流程事务的整体流程表面上看比较简单,首先是创建事务,运行业务代码,当有需要回滚的异常发生时,回滚当前事务,没有异常发生,就提交当前事务,当然,当使用
2021-06-04 19:32:18
195
1
原创 mybatis的缓存相关源码分析
目录前言1.二级缓存2.一级缓存二、mybatis与spring结合时的一级缓存失效问题总结前言mybatis中的缓存分为一级缓存和二级缓存,在查询相同内容的时候能够提高查询速度。本文从源码上分析缓存的实现以及mybatis和spring结合之后一级缓存失效的问题。一、mybatis中的缓存相关源码分析1.二级缓存在查询过程中,首先在二级缓存中查找,当二级缓存中找不到时继续接下来的查询,源码如下,可以看出二级缓存是mapperStatement对象中的。
2021-06-02 14:43:25
147
原创 spring容器的启动流程源码分析
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言 一、pandas是什么? 二、使用步骤 1.引入库 2.读入数据 总结前言提示:这里可以添加本文要记录的大概内容:例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。提示:以下是本篇文章正文内容,下面案例可供参考一、pandas是什么?示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数..
2021-06-01 18:11:58
99
原创 DispatcherServlet的请求处理流程
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言 一、pandas是什么? 二、使用步骤 1.引入库 2.读入数据 总结前言上一篇文章中分析了tomcat的请求处理流程,在springmvc项目中,tomcat接收到请求后,最终会将请求发送到dispatcherServlet中,dispatcherServlet可以看成是tomcat中的一个普通servlet,本文就dispatcherServlet的处理过程进行分析。一、se..
2021-05-30 12:56:26
1290
1
原创 Tomcat处理请求流程源码解析
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言 一、pandas是什么? 二、使用步骤 1.引入库 2.读入数据 总结前言提示Tomcat提示:以下是本篇文章正文内容,下面案例可供参考一、pandas是什么?示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。二、使用步骤1.引入库代码如下(示例):import numpy as np import pandas a..
2021-05-27 20:53:20
591
原创 apollo基于长轮询的配置更新源码
目录前言一、apollo客户端长轮询请求源码二、服务端1.服务端接收请求处理代码2.配置更新发布相关逻辑三、客户端更新配置总结前言长轮询和传统轮询一样从服务器请求数据,但是,长轮询中服务器不会立即给客户端返回数据,如果没有数据,服务端会保持这个请求等待数据到来,或者超时报错,之后把数据返回给客户端。一、apollo客户端长轮询请求源码客户端的请求逻辑比较简单,就是发起了一个超时时间为90s的http请求,关于数据返回之后的配置更新逻辑在详细说明。 priva
2021-05-23 10:17:17
949
原创 apollo客户端的启动流程源码分析
目录前言一、apollo客户端启动完成的工作二、apollo配置加载的过程1.引入库2.initialize()3.initializ(environment)4.postProcessEnvironment()三、springboot配置加载的流程四、springboot和apollo属性加载的先后顺序总结前言公司中使用apollo作为配置中心,最近时间比较宽裕,便决定把apollo源码学习一下,本文主要是客户端启动的相关源码。一、apollo客.
2021-05-21 12:02:31
1178
1
原创 mybatis的mapper方法参数解析过程源码
文章目录前言一、参数解析过程源码二、BeanWrapper和MapWrapper的get方法1.BeanWrapper的get方法2.MapWrapper的get方法三、@Param对应的ParamMap的生成过程总结前言Mybatis的mapper方法传递参数可以通过@param,对象object,map和list等方式。本文从源码层次分析每种参数传递的流程。一、参数解析过程源码参数解析的过程比较复杂,本文就重点代码进行分析。public void...
2021-05-19 20:24:35
789
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人