为了不把开发和源码分析混淆,决定分开写; 接下来分析一下插件的源码,说道这里老套路先说一个设计模式,他就是责任链模式 责任链模式:就是把一件工作分别经过链上的各个节点,让这些节点依次处理这个工作,和装饰器模式不同,每个节点都知道后继者是谁,适合为完成同一个请求需要多个处理类的场景; Handler:定义了一个处理请求的标准接口; ConcreteHandler:具体的处理者,处理他负责的部分,根据业务可以结束处理流程,也可以将请求转发给他的后继者; client:发送者,发起请求的客户端; 责任…
目录 零.一级缓存和二级缓存的流程 一级缓存总结 二级缓存总结 一.缓存接口Cache及其实现类 二.cache标签解析源码 三.CacheKey缓存项的key 四.二级缓存TransactionCache 五.二级缓存测试 六.一级缓存源码解析 七.测试一级缓存 前文传送门:mybatis源码学习:从SqlSessionFactory到代理对象的生成 零.一级缓存和二级缓存的流程 以这里的查询语句为例. 一级缓存总结 以下两种情况会直接在一级缓存中查找数据 主配置文件或映射文件没有配置二级缓存…
系列文章目录和关于我 一丶什么是SpringBoot自动装配 SpringBoot通过SPI的机制,在我们程序员引入一些starter之后,扫描外部引用 jar 包中的META-INF/spring.factories文件,将文件中配置的类型信息加载到 Spring 容器,实现引入starter即可开启相关功能的操作,大大简化了程序员手动配置bean,即开即用. 二丶SpringBoot自动装配源码解析 1.源码解析入口 SpringApplication.run(启动类.class, args…
其实我本来是不打算写这个PageHelper的,但是后来想了想,还是写了吧!现在市场用Mybatis的产品分页应该差不多都是用PageHelper来实现的,毕竟Mybatis的分页rowbound...不说了之前说了,反正是没人用; 分页插件的使用: 中文文档:https://github.com/pagehelper/Mybatis-PageHelper/blob/master/README_zh.md 使用手册:https://github.com/pagehelper/Mybatis-Pa…
[一]在要生成代码的项目模块的pom.xml文件中添加maven插件 <!--mybatis代码生成器--> <plugin> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-maven-plugin</artifactId> <version>1.3.2</version> <dependencies>…
插件概述: 插件是用来改变或者扩展mybatis的原有功能,mybatis的插件就是通过继承Interceptor拦截器实现的,在没有完全理解插件之前j禁止使用插件对mybatis进行扩展,有可能会导致严重的问题; mybatis中能使用插件进行拦截的接口和方法如下: Executor(update,query,flushStatement,commit,rollback,getTransation,close,isClose); StatementHandler(prepare,paramet…
0. FastThreadLocal简介 如同注释中所说:A special variant of ThreadLocal that yields higher access performance when accessed from a FastThreadLocalThread. 这是ThreadLocal的变种,但是有更高的性能 ps.本文涉及的源码版本如下: JDK : java-1.8.0-openjdk-1.8.0.141-1.b16.ojdkbuild.windows.x86_6…
今天继续了解model类 /** 2 * Returns the form name that this model class should use. 3 * 4 * 返回表单的名称,就是这个 model 的类名 5 * 6 * The form name is mainly used by [[\yii\widgets\ActiveForm]] to determine how to name 7 * the input fields for the attributes in a mode…
大体思路(六) 本节内容: 一.生命周期的钩子函数的实现 ==> callHook(vm , 'beforeCreate') beforeCreate 实例创建之后 事件数据还未创建 二.初始化initState ==>initState(vm) // 初始化数据 ==> initProps(vm,opts.props) 待续 ==> initMethods 待续 ==> initComputed 待续 ==> if data initData else { obser…
在spring中,是支持单实例bean的循环引用(循环依赖)的,循环依赖,简单而言,就是A类中注入了B类,B类中注入了A类,首先贴出我的代码示例 @Component public class AddressVO { @Autowired private UserVO userVO; } @Component public class UserVO { @Autowired private AddressVO addressVO; public void test(){ System.out.p…
1.使用GitHub 我们一直用GitHub作为免费的远程仓库,如果是个人的开源项目,放到GitHub上是完全没有问题的.其实GitHub还是一个开源协作社区,通过GitHub,既可以让别人参与你的开源项目,也可以参与别人的开源项目. 在GitHub出现以前,开源项目开源容易,但让广大人民群众参与进来比较困难,因为要参与,就要提交代码,而给每个想提交代码的群众都开一个账号那是不现实的,因此,群众也仅限于报个bug,即使能改掉bug,也只能把diff文件用邮件发过去,很不方便. 但是在GitHub…
介绍 > 基于4.5.2版本的源码 1. RocketMQ是从4.3.0版本开始支持事务消息的. 2. RocketMQ的消息队列能够保证生产端,执行数据和发送MQ消息事务一致性,而消费端的事务一致则有消费重试来补偿实现 3. 基于2PC思想来实现,增加一个补偿逻辑来处理二阶段超时或者失败的消息 名词解释 名词 解释 prepare消息 又名Half Message,半消息,标识该消息处于"暂时不能投递"状态,不会被Comsumer所消费,待服务端收到生成者对该消息的commit…
前言 说起mybatis的一级缓存和二级缓存我特意问了几个身边的朋友他们平时会不会用,结果没有一个人平时业务场景中用. 好吧,那我暂且用来学习源码吧.一级缓存我个人认为也确实有些鸡肋,mybatis默认开启一级缓存,支持在同一个会话(sqlsession)同一个statement执行两次,则第二次会默认会使用第一次创建的缓存对象. 二级缓存前一篇粗略介绍了下,默认使用内存对象[PerpetualCache]内部维护一个HashMap对象来存储.那么先来看几张图片[图片来自一位朋友,文章最后参考连…
AJ分享,必须精品 二维码是一项项目中可能会用到的,iOS打开相机索取二维码的速度可不是Android能比的...(Android扫描二维码要来回来回晃...) 简单不多说,如何把一段资料(网址呀,字符串)变成二维码,直接上代码 步骤: 导入CoreImage框架 #import <CoreImage/CoreImage.h> 通过滤镜CIFilter生成二维码 #import "ViewController.h" #import <CoreImage/CoreIma…
目录 一.自定义插件流程 二.测试插件 三.源码分析 1.inteceptor在Configuration中的注册 2.基于责任链的设计模式 3.基于动态代理的plugin 4.拦截方法的intercept(invocation) 四.插件开发插件pagehelper 1.引入相关依赖 2.全局配置 3.测试分页 五.插件总结 前文传送门: mybatis源码学习:从SqlSessionFactory到代理对象的生成 mybatis源码学习:一级缓存和二级缓存分析 mybatis源码学习:基于动…
前文传送门: mybatis源码学习:从SqlSessionFactory到代理对象的生成 mybatis源码学习:一级缓存和二级缓存分析 下面这条语句,将会调用代理对象的方法,并执行查询过程,我们一起来看看它的内部是如何实现的. User user1 = userDao1.findById(41); 一.动态代理:执行代理对象的方法时拦截,进行方法增强. /** * 作用:执行被代理对象的任何接口方法都会经过该方法 * @param proxy : 代理对象的引用 * @param metho…
JUnit 3.8.1 源码学习 环境搭建(源码加载配置) 由于IDE自身含有JUint插件,因此通过正常途径是没有源码加载入口的,因此需通过手动加载扩展JAR,然后再添加对应源码JAR,如图:项目右键->Propreties 完成之后,项目结构如图: 启动类创建 为了能够对JUint的整个流程有个完整的认识,通过一个简单的调用作为入口,走进JUint的大门.在这里通过一段非常简单的代码,如下 public class Caculator { int a,b; public Caculator(…
Spring源码学习--ClassPathXmlApplicationContext(一) spring源码学习--FileSystemXmlApplicationContext(二) spring源码学习--AbstractXmlApplicationContext(三) Spring源码学习--XmlWebApplicationContext(四) Spring源码学习--AbstractRefreshableWebApplicationContext(五) Spring源码学习--Abst…
[目录]Spring 源码学习 jwfy 关注 2018.01.31 19:57* 字数 896 阅读 152评论 0喜欢 9 用来记录自己学习spring源码的一些心得和体会以及相关功能的实现原理,难免存在一些错误的情况,如果发现了,希望能够指出来~ spring版本 4.3.9.RELEASE Spring xml解析 源码学习 本文是学习spring源码的第一篇,主要讲的是,spring经过怎样的步骤完成xml文件的读取并生成相关的beandefinition信息 Spring xml的b…
Spring 源码学习笔记11--Spring事务 Spring事务是基于Spring Aop的扩展 AOP的知识参见<Spring 源码学习笔记10--Spring AOP> 图片参考了https://www.processon.com/view/60f4d859e0b34d0e1b6bb40c?fromnew=1 逻辑事务和物理事务的概念来自https://wiyi.org/physical-and-logical-transactions.html 本文忽略了编程式事务,探究了基于事务注…
最近在跟着一个大佬学习Hadoop底层源码及架构等知识点,觉得有必要记录下来这个学习过程.想到了这个废弃已久的blog账号,决定重新开始更新. 主要分以下几步来进行源码学习: 一.搭建源码阅读环境二.源码项目结构概览及hdfs源码包结构简介三.NameNode介绍 第一步,搭建源码阅读环境. 把Hadoop源码包导入到开发工具,eclipse或者idea都行.这里我的环境是mac os,使用的工具是idea,Hadoop版本为2.6.5. 首先,解压缩Hadoop源码包,可以选择移动解压之后的源…
Netty 源码学习--EventLoop 在前面 Netty 源码学习--客户端流程分析中我们已经知道了一个 EventLoop 大概的流程,这一章我们来详细的看一看. NioEventLoopGroup 类层次结构 我们先来看下 NioEventLoopGroup 这个类. public class NioEventLoopGroup extends MultithreadEventLoopGroup { } 发现他的父类是 MultithreadEventLoopGroup.我们有必要来看…
源码学习到这里就要结束了; 来总结一下吧 Mybatis的总体架构 这次源码学习我们,学习了重点的模块,在这里我想说一句,源码的学习不是要所有的都学,一行一行的去学,这是错误的,我们只需要学习核心,专注重点,参考借鉴,这才是我们的目标; 第一天:日志模块学习 第二天:数据源模块学习 第三天:缓存模块学习 第四天:反射模块学习 第五天:核心流程学习 初始化 -> binding模块 -> SqlSession 第六天:核心流程学习  Executor 第七天:插件模块学习  插件开发原理 -&g…
Mybatis技术内幕系列博客,从原理和源码角度,介绍了其内部实现细节,无论是写的好与不好,我确实是用心写了,由于并不是介绍如何使用Mybatis的文章,所以,一些参数使用细节略掉了,我们的目标是介绍Mybatis的技术架构和重要组成部分,以及基本运行原理. 博客写的很辛苦,但是写出来却不一定好看,所谓开始很兴奋,过程很痛苦,结束很遗憾.要求不高,只要读者能从系列博客中,学习到一点其他博客所没有的技术点,作为作者,我就很欣慰了,我也读别人写的博客,通常对自己当前研究的技术,是很有帮助的. 尽管还…
简述 关于ORM的定义,我们引用了一下百度百科给出的定义,总体来说ORM就是提供给开发人员API,方便操作关系型数据库的,封装了对数据库操作的过程,同时提供对象与数据之间的映射功能,解放了开发人员对访问数据库交互的维护,大大提高工作效率. 我们以传统JDBC编程中的查询操作为例进行说明,其主要步骤如下: (1)注册数据库驱动类,明确指定数据库URL地址.数据库用户名.密码等连接信息. (2)通过DriverManager打开数据库连接. (3)通过数据库连接创建Statement对象. (4)通…
前言: 分析了很多方面的mybatis的源码以及与spring结合的源码,但是难免出现错综的现象,为了使源码陶冶更为有序化.清晰化,特作此随笔归纳下分析过的内容.博主也为mybatis官方提供过pull request,并被采纳. 名词解释 service层关联:指的是业务层调用数据持久层即dao层的接口,其需要class的配合 注解模式加载:指的是插件通过解析class类中方法上的注解来完成注册dao层接口的组装,比如@select/@update等注解 mapper配置文件加载:指的是直接读…
作者:依乐祝 原文地址:https://www.cnblogs.com/yilezhu/p/9852711.html 上篇文章给大家分享了如何集成我写的一个Ocelot扩展插件把Ocelot的配置存储到数据库中.并没有对实现原理进行相应的阐述.今天抽空把实现的原理给大家说道说道.明白原理后,大家就可以自行改写进行扩展来满足自身需要了! 再次感觉张队的审稿,并给出的修改意见! 源码解析过程 大家可以自行分析Ocelot的源码,我通过分析ocelot的源码得出,如果要实现重写配置文件的方式,只需要写…
深度学习(七十一)darknet 源码阅读…
最近这一周,主要在学习mybatis相关的源码,所以记录一下吧,算是一点学习心得 个人觉得,mybatis的源码,大致可以分为两部分,一是原生的mybatis,二是和spring整合之后的mybatis源码学习(也就是mybatis-spring这个jar包的相关源码),这边笔记,主要来学习原生mybatis: 还是先用描述一下,原生mybatis从解析xml到执行SQL的一个流程: 1.第一步:首先会通过sqlSessionFactoryBuilder来build一个SQLSessionFac…
本文主要是个人学习mybatis缓存的学习笔记,主要有以下几个知识点 1.一级缓存配置信息 2.一级缓存源码学习笔记 3.二级缓存配置信息 4.二级缓存源码 5.一级缓存.二级缓存总结 1.一级缓存配置: 一级缓存是SqlSession级别的,同一个sqlSession执行多次相同的查询语句时,第二次会从缓存中获取数据,不查询数据库:一级缓存是无法关闭的,默认是SESSION级别 mybatis一级缓存默认是开启的,一级缓存有两个配置值,SESSION级别和STATEMENT级别,这两个级别的区…