
源码
文章平均质量分 79
Me_Liu_Q
苹果越分享越少,知识越分享越多。
展开
-
TCP粘包/拆包-解决方案
TCP 是个“流”协议,所谓流,就是没有界限的一串数据。大家可以想想河里的流水, 是连成一片的,其间并没有分界线。假设 Socket 通道中有两个完整的数据包 D1、D2什么是粘包第一次读取到了 D1、D2 完整数据包,D1 跟 D2 就粘一起了,确当成是一个数据包处理。什么是拆包第一次读取到了完整的 D1 包和 D2 包的部分内容,第二次读取到了 D2 包的剩余内容,导致 D2 数据包不完整。解决方案1:报文限定长度设定(发送/响应)报文长度,如果(发送/响应)报文长度不原创 2021-07-10 18:58:10 · 462 阅读 · 0 评论 -
MySql逆向工程(自定义实现MySql逆向生成Java实体类,包含Lombok注解,Swagger注解,Javax注解)
很多开发者用的 MySql逆向工程应该都是框架自带的(MyBatis),但他的效果可能达不到我们想要的效果,然后生成完代码之后,又要手动去去修修改改,甚是麻烦。这边说明下,我做的这个MySql逆向工程,仅有以下依赖,他是一个单独的模板。mysql-connector-java mysql 连接。fastjson 数据库查询的数据,转换成Java类型。lombok 懒得写 get/set。生成的Java实体类有什么功能?Lombok注解,需要开启。如果没有开启,则生成 get/set/.原创 2021-03-24 11:29:37 · 1566 阅读 · 0 评论 -
SpringAOP分布式锁(可以适配redis,zk等多种中间件实现)
关于分布式锁,我也在网上找了很多文章,但始终没有找到一个我想要的解决方案,于是自己动手写了一个。什么是分布式锁:就是在多个服务端都能访问到的中间件上打上一个标记。例如:redis, zookeeper, mysql本文是基于redis 的 setnx 实现分布式锁,但是我写的分布式锁解决方案,还可以适配其他中间件实现。这个才是重点。先说下分布式锁需要解决的问题:有一个服务端获取到了锁,其他服务端是阻塞等待,还是直接以失败响应。获取锁失败,是否需要重试一会。锁必需要具备有可重入性质。服原创 2021-01-06 15:54:36 · 830 阅读 · 2 评论 -
SpringMVC核心组件之(HandlerAdapter)
url映射(HandlerMapping)的执行适配器在DispatcherServlet类中的initHandlerAdapters()初始化handlerAdapters。SpringMVC默认有三个HttpRequestHandlerAdapter, 该HttpRequestHandler接口的适配执行器SimpleControllerHandlerAdapter, 该Controller接口的适配执行器RequestMappingHandlerAdapter,处理@RequestMapp原创 2020-12-30 10:58:03 · 1049 阅读 · 0 评论 -
SpringMVC核心组件之(HandlerMapping)
HandlerMapping url映射,也就是访问的url,对应的处理器。在DispatcherServlet类中的initHandlerMappings()初始化HandlerMapping。SpringMVC默认有两个HandlerMappingBeanNameUrlHandlerMapping:只要beanName或别名是以/开头就会添加到该映射处理器中。RequestMappingHandlerMapping:@RequestMapping映射处理,最为常用的。先看看代码块,如果需要原创 2020-12-27 15:28:28 · 278 阅读 · 0 评论 -
SpringMVC底层源码分析(Web容器初始化)
SpringMVC是基于Servlet进行包装的,也就是一个Servlet的封装框架。spring-mvc官方文档,用谷歌浏览器打开,翻译成中文,简直很美。https://docs.spring.io/spring-framework/docs/5.1.20.RELEASE/spring-framework-reference/web.html#mvcpom.xml依赖; packaging 指定 war包<dependencies> <dependency&g原创 2020-12-27 11:22:54 · 208 阅读 · 0 评论 -
Spring后置处理器(BeanPostProcessor)(BeanFactoryPostProcessor)
Spring的后置处理器,在应用Spring框架开发中非常重要,Spring底层的核心,就通过各种后置处理器去完成IOC容器的启动,AOP代理对象的创建。Spring的后置处理器有两大类,BeanFactory与Bean。BeanFactoryBean 工厂方面的后置处理器BeanFactoryPostProcessor 获取IOC容器BeanDefinitionRegistryPostProcessor 向容器注册Bean...原创 2020-12-23 11:25:52 · 494 阅读 · 5 评论 -
Spring底层源码解析(开篇)
本文基于Spring5注解版进行分析做Java开发的程序员相信都用过Spring框架,也知道IOC,DI,AOP。但是IOC是什么呢?它是怎么创建对象的呢?它又是怎么管理对象的呢?DI又是怎么帮我们给对象的属性赋值的呢?会在什么时候进行赋值呢?AOP是怎么实现的呢?AOP又是怎么工作的呢?为什么要去了解Spring框架的底层原理呢?只有在深入的了解到一个框架的底层原理,才方便我们去合理的用它。在我们写代码的时候,可以清晰的知道该怎么用框架提供的功能。进入正题:在分析Spring底层源原创 2020-12-05 19:54:46 · 2290 阅读 · 5 评论 -
mybatis-spring底层源码分析
为什么要学习下mybatis-spring的底层?mybatis-spring 是一款基于Spring开发的优秀框架之一,我们可以通过mybatis-spring学习到如何基于Spring的开放组件,去拓展开发我们的应用程序。如何在Spring容器启动的时候扫包注册自定义的组件? (例如:mapper 接口)如何应用Spring的事务管理器?环境配置查看上一篇文章 mybatis-spring纯注解开发学习mybatis-spring底层需要对mybatis底层源码有一定的了解 MyBat原创 2020-12-21 17:20:09 · 409 阅读 · 2 评论 -
Spring整合MyBatis纯注解开发
为什么要学习mybatis-spring注解版开发呢?可以帮助我们了解到mybatis在spring-boot中自动装配做了什么事情。1:环境搭建maven依赖:<dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId&原创 2020-12-19 19:23:34 · 613 阅读 · 1 评论 -
自定义JDBC使用Spring事务
我们自己定义的JDBC如何使用Spring提供的事务管理呢?pom依赖<dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.1.10.RELEASE&l原创 2020-12-19 17:51:56 · 184 阅读 · 1 评论 -
Spring 事务七大传播行为
@Transactional的属性:propagation,事务传播行为,枚举类型 Propagation。注意:事务传播行为在同一Service类中是无效的,只有在AService 调用 BService才有效。因为事务处理是通过AOP代理拦截工作的,在同一Service里调用,不会再触发代理方法拦截。这里写目录标题1:Propagation.REQUIRED,默认的2:Propagation.SUPPORTS3:Propagation.MANDATORY4:Propagation.REQUIR原创 2020-12-19 11:20:08 · 292 阅读 · 0 评论 -
Spring AOP底层源码分析
本文基于Spring5注解版进行分析分两大块分析,Spring创建AOP切面代理对象流程AOP切面方法通知执行流程Spring的AOP切面功能大家都用过,但是也会有一些人对AOP不是很理解,本文着重解析AOP的工作原理。AOP是什么?对我们的业务方法实现增强,对执行方法进行拦截。实际就是利用JDK/CGLIB实现动态代理。AOP应用场景,能帮我们干什么?控制层请求日志打印 ,保存。控制层权限控制。业务层分布式锁。Spring 事务。开始分析:要用Spring AO原创 2020-12-14 14:53:06 · 301 阅读 · 0 评论 -
Spring getBean, createBean, doCreateBean
原文地址:Spring 启动流程原文地址:Spring Bean创建流程Spring getBean从IOC容器中获取Bean,如果没有则创建Bean -> createBeanSpring createBean创建Bean实例 -> doCreateBean创建Bean的流程创建Bean的时候,会先记录当前创建的Bean,实例化Bean后,先在三级缓存中,保存信息,为了解决循环依赖问题。(A依赖B,B依赖A)实例化Bean之前,会先创建有@DependsOn注解的Be原创 2020-12-12 22:08:09 · 567 阅读 · 0 评论 -
Spring Bean创建流程图
原文地址:https://blog.youkuaiyun.com/liuqi199707/article/details/110732380原文地址:https://blog.youkuaiyun.com/liuqi199707/article/details/111052503简单流程图详细流程图原创 2020-12-12 21:58:03 · 676 阅读 · 0 评论 -
Spring底层源码解析(二)创建Bean finishBeanFactoryInitialization(beanFactory)
本文基于Spring5注解版进行分析继上一篇文章Spring 底层源码解析(一)扫包注册Bean继续分析Bean的创建过程。此方法将会创建所有的非懒加载的Bean先来看一张简单的Bean创建流程图,Spring创建Bean看着和后置处理器()息息相关啊BeanPostProcessorSpring Bean创建源码流程图对bean的创建描述得非常清晰,请认真观看,跟着流程图走一遍代码。走源码1.0.0:finishBeanFactoryInitialization()/** *原创 2020-12-12 19:30:35 · 721 阅读 · 1 评论 -
Spring底层源码解析(一)扫包注册Bean
本文基于Spring5注解版进行分析主要分析Spring扫包工作流程@ComponentScan(),Bean创建流程,Bean生命周期Maven依赖:<dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId>原创 2020-12-06 23:36:50 · 790 阅读 · 5 评论 -
MyBatis 核心类分析
继上一篇文章MyBatis 底层源码解析,再次分析下MyBatis的核心类初始化,解析配置文件相关类:Configuration:核心中核心配置类,无论执行什么操作,都有他的存在。XMLConfigBuilder:解析mybatis-config.xml。XMLMapperBuilder:解析mapper.xml。XMLStatementBuilder:解析mapper.xml中的Sql语句。MapperAnnotationBuilder:解析Mapper接口的注解信息。MapperBuil原创 2020-11-22 22:26:12 · 604 阅读 · 2 评论 -
MyBatis底层源码解析 (详细)
MyBatis一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生类型、接口和 Java 的 POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。MyBatis底层是怎么运行的呢?1:启动,加载配置文件new SqlSessionFactoryBuilder().build(reader),SqlS原创 2020-11-18 12:22:53 · 15844 阅读 · 25 评论