自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(16)
  • 问答 (1)
  • 收藏
  • 关注

原创 Spring事务原理

一、事务相关的组件 1.BeanFactoryTransactionAttributeSourceAdvisor 事务切面 ,AOP用来判断方法是否需要拦截,生成代理对象 2.AnnotationAwareAspectJAutoProxyCreator AOP的后置处理器,postProcessAfterInitialization方法中会利用BeanFactoryTransactionAttributeSourceAdvisor事务切面判断每个Bean的类上或方法是否标注@Transacti...

2021-05-19 21:50:45 179

原创 SpringBoot自动配置原理&内嵌tomcat启动及DispatchServlet加载时机

一.概述 SpringBoot简单来说就是是对spring,springmvc的一个高级封装,根据spring自己的spi机制加载spring.factories文件里的各种配置类。 一个仅依赖web环境的spirngboot项目,Springboot的启用原理可以概述为以下四步: 1、SpringApplication.run 会创建一个IOC容器: AnnotationConfigServletWebServerApplicationContext, @Spring...

2021-05-18 22:09:46 918

原创 Spring监听器原理

1.首先介绍下如何使用Spring的监听器 1.1 声明监听器,只要在方法上加上@EventListener注解就可以了,注解和方法参数就是事件类型@Componentpublic class AppEventListener { public AppEventListener(){ System.out.println("AppEventListener..."); } @EventListener(MessageEvent.class) //监听事件 public ...

2021-05-15 19:08:08 470

原创 SpringIOC容器初始化流程12大步源码解析

目录1.概要2.AnnotationConfigApplicationContext构造器3.容器刷新第一步--prepareRefresh()准备上下文环境4.第二步创建工厂实例5. 第三步预准备工厂6.第四步postProcessBeanFactory7. 第五步执行所有的BeanFactory后置增强器8. 第六步注册所有的bean的后置处理器 BeanPostProcessors9. 第七步初始化国际化组件10. 第八步初始化事件多播器组件11. 第九步o

2021-03-29 21:51:22 878 2

原创 SpringIOC中Bean的生命周期以及各种PostProcessor后置处理器的执行时机

一.SpringIOC大致流程可以总结为 读取解析配置文件 -> 组装bean定义放到Map -> 根据bean定义依次创建对象 -> 把对象都放到map 这四个大步骤二.Spring有三种生命周期增强器BeanFactoryPostProcessor Bean工厂后置处理器,可以对工厂进行增强 BeanPostProcessor Bean的后置处理器,对Bean的实例化前后,初始化前后进行干预。 InitalizingBean Bean完全初始化后可以进行一波处理...

2021-03-26 20:53:50 920 2

原创 SpringIOC运行流程概要

1. IOC架构原理图1. 首先呢在spring中所有的资源都用Resource表示,比如我们创建bean常用的方式有xml 或注解,这些资源代表bean的配置清单,可以比喻成bean的创建“图纸”。如下代码2.BeanDefinitionReader bean定义读取配置3. BeanDefinitionRegister bean定义注册器,它的作用就是利用BeanDefinitionReader把我们的资源加载成一个个BeanDefinition(Bean定义)例如我们用x.

2021-03-18 20:54:50 197

原创 Mybatis执行流程源码分析

概要: 在单独使用Mybatis时通常需要以下几行代码:public class Demo { public static void main(String[] args) { // 第一阶段:MyBatis的初始化阶段 String resource = "mybatis-config.xml"; // 得到配置文件的输入流 InputStream inputStream = null; ...

2021-02-01 22:24:57 1525 5

原创 Mybatis中Mapper接口如何和xml中的sql绑定&&工厂模式和动态代理在Mybatis中的应用

1. 在使用Mybatis时我们通常要写一个接口,然后XML里写对应的sql语句,那我们在调用接口的时候是如何跟XML中的语句做绑定的呢 下面我们分析下。Mapper接口和XMLSQL绑定是在binding包中实现的。通过类名Proxy我们可以想到他是通过动态代理来实现。上图中SqlSession的getMapper方法最终调用的是MapperRegistry中的getMapper方法下面对该包的类依次分析下2.MapperRegistry通过MapperProxyFactory代.

2021-01-28 21:43:47 668

原创 mybatis源码parsing包--PropertyParser文档解析中的变量替换

mybatis中对占位符替换成实际的变量值用到的就是PropertyParser类。例如 select * from tb where id = #{id} 需要替换成 select * from tb where id = 123PropertyParser的parse方法实际上使用了GenericTokenParser 的parser方法,下面分析下GenericTokenParser的parser方法其中GenericTokenParser类中有如下三个属性以 SELECT .

2021-01-03 20:45:49 390

原创 mybatis源码reflection包--TypeParameterResolver泛型解析器

TypeParameterResolver是泛型参数解析器,他的作用是解析出一个方法返回值或字段的真正类型。举个栗子:定义俩类:public class User<T> { public List<T> getInfo() { return null; }}public class Student extends User<Number> {}请问调用Student类的getInfo方法输出的参数是啥?答案很eas.

2021-01-03 19:29:55 200

原创 mybatis源码reflection包--参数解析器ParamNameResolver

ParamNameResolver是一个参数名解析器,负责把方法的参数按顺序解析出来并进行标注。1.因为设计到字符串处理,随便写一个方法进行debug跟踪ParamNameResolver在构造器中对getUserInfo进行解析,逻辑很简单,获取该方法所有参数类型进行遍历,如果该参数上有@Param注解就获取Param中的value作为属性名,没有的话就判断配置中useActualParamName是否允许使用原始参数名,不允许就用参数顺序进行命名。最后把解析结果存到ParamNameReso

2021-01-03 17:53:37 154

原创 mybatis源码reflection包--反射核心类reflector

Reflector是reflection包中最核心的一个类,负责对一个类的进行反射解析,并将解析后的结果存到属性中。Reflector中的属性如下:// 要被反射解析的类 private final Class<?> type; // 能够读的属性列表,即有get方法的属性列表 private final String[] readablePropertyNames; // 能够写的属性列表,即有set方法的属性列表 private final String[] w

2021-01-03 16:55:45 196 1

原创 mybatis源码reflection包--属性子包

reflection包下的property包是属性子包,该包中的类用来完成对象属性相关的操作。1.该包下一共三个类(1)PropertyCopier 提供对象属性复制功能。 以下代码是PropertyCopier对象copy的方法,通过反射获取需要copy类型的所有字段然后把源对像的值放到目标对象中,如果源对象有父类就继续复制父类的属性值/** * 完成对象的输出拷贝 * @param type 对象的类型 * @param sourceBean 提供属性值的对象

2021-01-03 15:35:50 180

原创 mybatis源码reflection包--invoker执行器子包

invoker子包是执行器子包,该包的类能基于反射实现对象方法的调用和对象属性的读写。1.Invoker接口一共三个实现 顾名思义三个实现的作用依次是 对象属性的写操作、对象方法的操作、对象属性的读操作2.Invoker接口 两个方法 (1)获取类型 (2)执行方法看一下MethodInvoker实现中Type的含义, 通过分析构造方法, 在method的参数只有一个时 type是入参的类型,否则是方法返回值的类型public class MethodInvoker imple..

2021-01-03 15:11:32 162

原创 mybatis源码reflection包--factory对象工厂子包

11

2021-01-03 14:55:49 219 1

原创 Mybatis源码结构概述

一. 包结构Mybatis项目所有包一共20个二.分组结构按照功能对包进行划分,之后源码阅读会更有条理,有层次。基础功能包 : exception relection annotations lang type io logging parsing 配置解析包: bingding builder mapping scripting darasource 核心操作包: jdbc cache transaction cursor executor session plugin读源.

2021-01-03 13:59:40 193

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除