自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(62)
  • 资源 (8)
  • 收藏
  • 关注

原创 【Spring 源码阅读】Spring IoC、AOP 原理小总结

Spring IoC、AOP 原理小总结前言版本约定正文Spring BeanFactory 容器初始化过程IoC 的过程AOP 的过程AnnotationAwareAspectJAutoProxyCreatorAOP 代理的创建过程Advice 执行的过程小结系列博文:【老王读Spring AOP-0】SpringAop引入&&AOP概念、术语介绍【老王读Spring AOP-1】Pointcut如何匹配到 join point【老王读Spring AOP-2】如何为 Pointc

2021-12-03 19:39:06 1130

原创 【老王读 Spring 源码】系列文章大合集

【老王读 Spring 源码】系列文章大合集前言版本约定正文Spring IoC 源码解读系列博文Spring AOP 源码解读系列博文小结前言分享 Spring 源码的理解,底层原理和设计实现。这里会整理所有关于【老王读 Spring 源码】的系列文章链接,方便寻找。温馨的传送门。。。这里会定期更新【老王读 Spring 源码】系列文章的链接,保持最新。。。版本约定Spring 5.3.9 (通过 SpringBoot 2.5.3 间接引入的依赖)正文Spring IoC 源码解读系列博

2021-11-11 20:26:14 603 1

原创 【SpringMVC源码三千问】Spring官方@RequestMapping路径匹配用法大全

先看下@Target({/*************限制匹配范围的参数******************/ // 请求方法限定 RequestMethod [ ] method() default {// 请求参数限定 String [ ] params() default {// 请求头限定 String [ ] headers() default {// 接收的 Content-Type 内容类型限定 String [ ] consumes() default {

2023-05-24 19:49:42 1897

原创 【SpringMVC源码三千问】@RequstMapping和RequestCondition

是 SpringMVC 中最常用的定义请求映射关系的注解。下面我们来分析一下它的源码。

2023-05-24 19:45:46 934

原创 【老王读SpringMVC-7】Controller method 的异常返回值处理

通过前面分析,我们知道, handler method 的执行是通过调用。执行过程中的异常全部会往上抛出,然后由来处理。DispatcherServlet 会调用 HandlerExceptionResolver 来对异常进行处理。可以看到,如果 handler method 执行过程中出现异常的话,会调用来处理,接着会通过来处理异常,最终解析成一个 ModelAndView 来进行处理。

2023-05-24 19:37:16 1252

原创 【老王读SpringMVC-6】Controller method 的正常返回值处理

handler method 的返回值处理包含两个方面:一是:返回值对象的处理;二是:视图的渲染。

2023-05-24 19:31:32 918

原创 【老王读SpringMVC-5】Controller method 是如何执行的?

通过前面对 Controller method 参数绑定的分析,我们知道, 被 @RequestMapping 标记 handler method 的执行是通过调用 。 具体的调用过程如下:参数解析、handler method 的执行 和 对返回值的处理,最终是通过 来处理的。 的处理过程如下:1、首先,通过 解析出方法执行所需要的参数,然后通过反射调用 handler method 来执行。2、如果 handler method 的返回值为空,则看是否跳过返回值处理和视图解析,直接返回3、

2023-05-24 19:25:00 521

原创 【老王读SpringMVC-4】请求参数是如何绑定到Controller method参数对象上的?

上一篇我们分析了,接下来,我们再看分析一下请求参数是如何绑定到 handler method 的参数对象上的?

2023-04-27 12:32:39 446

原创 【老王读SpringMVC-3】根据 url 是如何找到 controller method 的?

前面分析了 request 与 handler method 映射关系的注册,现在再来分析一下 SpringMVC 是如何根据 request 来获取对应的 handler method 的?可能有人会说,既然已经将 request 与 handler method 映射关系注册保存在了中,那么根据 request 不就能直接从 registry 中获取到相应的 handler method 了吗?

2023-04-26 12:35:20 622

原创 【老王读SpringMVC-2】url 与 controller method 的映射关系注册

断点打在 bean class 的构造函数或初始化方法里面,当断点进入时,可以很方便的从调用堆栈中找到相应的 BeanDefinition 的值,BeanDefinition 中就记录了这个 bean 是从在哪里定义的。如果断点打不到 bean class 里面的话,那么就可以在 applicationContext 中获取相应的 BeanDefinition,再查看 bean 定义的地方。

2023-04-25 21:13:17 525

原创 【SpringMVC源码三千问】DispatcherServlet源码解析

是 SpringMVC 处理请求分发的方法,只要是 spring mvc 处理的 http 请求,都会经过 DispatcherServlet 的请求分发处理,从而调用相应的 handler method。

2023-04-25 20:54:44 511

原创 【老王读SpringMVC-1】SpringMvc源码解读引入

在研究 SpringMVC 之前,我们先来了解一下什么是 MVC?MVC 模式(Model–view–controller)是软件工程中的一种软件架构模式,它把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller)。参考: https://zh.m.wikipedia.org/zh-hans/MVC。

2023-04-07 10:47:58 357

原创 【Spring事物三千问】DataSource的设计和常用实现——Hikari、Druid

AbstractRoutingDataSource 是 Spring 对 DataSource 的抽象实现。它是一个基于 lookup key ,将的调用路由到目标数据源的抽象数据源实现。通常都是通过 ThreadLocal 绑定的事务上下文变量来确定路由到哪个目标数据源。是 AbstractRoutingDataSource 的实现类,它是一个能基于当前事务隔离级别路由到目标数据源的 DataSource 数据源。

2023-03-22 11:35:11 921

原创 【Spring事物三千问】Spring配置多数据源 vs 给多个数据源添加事物管理

在 Spring 中配置多数据源 与 给多个数据源添加事物管理是有区别的。如果只需要使用到多个数据源,而不需要进行事物管理,是可以进行简单处理的。

2023-03-21 10:27:54 323

原创 【Spring事物三千问】TransactionSynchronizationManager的原理分析

TransactionSynchronizationManager 是管理每个线程的DB连接资源和事务同步的核心委托类。如果事务同步未处于活动状态,则表示当前没有事务,或者事务管理器不支持事务同步。TransactionSynchronizationManager 中定义了很多 ThreadLocal 变量,来保存事务相关的信息不同的平台的DB连接资源对象可能是不一样的,反映在 Spring 源码当中就是调用方法时,绑定的 DB 连接资源不同。

2023-03-14 20:34:02 1710

原创 【Spring 源码三千问】同样是AOP代理bean,为什么@Async标记的bean循环依赖时会报错?

前面在分析那么,为什么同样是 AOP 代理 bean,差别就这么大呢?

2023-03-08 18:56:49 197

原创 【Spring事物三千问】DataSource的设计和常用实现——Hikari、Druid

AbstractRoutingDataSource 是 Spring 对 DataSource 的抽象实现。它是一个基于 lookup key ,将的调用路由到目标数据源的抽象数据源实现。通常都是通过 ThreadLocal 绑定的事务上下文变量来确定路由到哪个目标数据源。是 AbstractRoutingDataSource 的实现类,它是一个能基于当前事务隔离级别路由到目标数据源的 DataSource 数据源。

2023-03-08 12:36:13 1052

原创 【老王读Spring Transaction-7】一个数据源的事物管理配置 与 多数据源的事物管理配置

大多数 Spring 应用程序只有一个数据源,只需要一个事务管理器(TransactionManager)。但是在多个数据源的情况下,我们就需要在一个应用程序中配置多个独立的事务管理器。我们可以通过 @Transactional 的 value 或 transactionManager 属性来指定让哪个 TransactionManager 生效。那么,一个数据源 与 多数据源的事物管理配置有什么不同呢?

2023-03-03 12:49:39 1226 1

原创 【Spring事物三千问】Spring的事务管理与MyBatis事物管理结合的原理

spring-tx 是一套事务管理框架。Mybatis 是一个 ORM 框架,它会操作 DB 连接来执行 sql,所以,也会涉及到事务的处理。在 MyBatis 中,是通过 SqlSession 来执行 sql 的,也是通过它来管理事务的。默认情况下,MyBatis 是开启事务的,即:那么,spring-tx 的事务管理是如何与 mybatis 的事务管理进行整合的呢?

2023-02-28 12:50:08 1177

原创 【Spring事物三千问】如何快速判断Spring项目中的事务是否生效?

如果 Spring 的事务没有生效,很有可能导致严重的生产问题,自己的能力也会受到组员和领导的质疑。那么,刚接手一个新项目,或者搭建了一个新项目,如何快速的判断我们的事务配置是否生效?

2023-02-27 10:05:54 1357

原创 【老王读Spring Transaction-6】spring-tx与DataSource连接池整合的原理

是 java 提供的一个获取 DB 连接的标准接口。它的实现类可以通过简单的实现,生成标准的连接对象;也可以使用连接池方式实现,生成的池化的连接对象。通常在企业级的开发当中,我们都会使用池化的连接对象,比如使用 apache 的 DBCP 连接池、阿里的 druid 连接池、springboot 默认使用的 hikari 连接池等那么,DataSource 是如何与 spring-tx 进行结合的呢?spring-tx 的核心关注点是事务的管理。连接的获取和关闭是交给连接池去实现的。

2023-02-17 09:20:09 620 1

原创 【老王读Spring Transaction-5】Spring事务传播行为propagation behavior的实现原理

Spring 对事务的封装除了实现了基本的事务管理之外,还提供了事务传播行为(propagation behavior)的高级特性。通常,事务范围内的所有代码都会在该事务中运行。但是,如果在事务上下文已经存在的情况下再去执行其他事务方法,则可以指定事务的传播行为。例如,代码可以在现有事务中继续运行(常见情况),或者可以暂停现有事务并创建新事务。事务传播行为的作用是将多个事务操作进行合并或者隔离。

2023-02-15 12:48:24 390

原创 【老王读Spring Transaction-4】Spring事务管理的核心原理——PlatformTransactionManager&TransactionStatus

begin: 获取连接commit: 提交事务(业务正常执行)rollback: 回滚事务(业务异常)Spring 中通过注解的方式实现了切面式的事务管理,其本质还是会经历上面三个步骤。下面我们就来研究一下 Spring 中是怎么实现事务的管理的。

2023-02-10 12:59:39 2183

原创 【老王读Spring Transaction-3】TransactionDefinition原理和源码解析

前文在分析@Transactional是如何被解析的时候讲到,@Transactional 配置的事务属性被解析出来之后,被放在了当中。是 Spring 中用来定义事务属性的接口,它继承自。下面就来详细分析一下的作用。

2023-02-08 10:14:32 621

原创 【老王读Spring Transaction-2】@Transactional是如何被 Spring 解析的?

前面透过讲解了实现事注解事务功能的原理。这一篇主要分析一下的注解元数据信息是如何被扫描和解析出来的。@EnableTransactionManagement 的详细知识可以点击:从EnableTransactionManagement顺藤摸瓜,研究@Transactional的实现原理。............

2022-09-01 13:03:15 436 1

原创 【老王读Spring Transaction-1】从EnableTransactionManagement顺藤摸瓜,研究@Transactional的实现原理

Spring 对事务的封装是一个相对独立的功能,通过来进行支持。里面的代码量也不大,我们完全可以像翻书的目录一样,浏览一下 spring-tx 的包结构和类,站在一个高的角度来审视一下 Spring 对事务的封装。.........

2022-08-31 14:43:34 505

原创 【Spring源码三千问】@Lazy的替代者ObjectFactory 和 ObjectProvider

Lazy 可以解决某些特殊场景下的循环依赖问题。在翻阅 @Lazy 的源码注释时,得知 @Lazy 可以通过 ObjectFactory 和 ObjectProvider 来进行替代。下面我们就来看看ObjectFactory 和 ObjectProvider的原理和使用吧…@Lazy为什么可以解决特殊的循环依赖问题@Lazy延迟加载与延迟注入有什么区别。...

2022-08-08 19:58:03 520

原创 【Spring源码三千问】ApplicationContext 与 BeanFactory 的作用是什么?它们有什么区别?

ApplicationContext 与 BeanFactory 的作用是什么?它们有什么区别?前言版本约定正文BeanFactoryHierarchycalBeanFactoryDefaultListableBeanFactoryApplicationContextApplicationContext vs BeanFactory小结SpringIoC源码视频讲解:前言我们在讲 Spring 容器器,通常指的是 Spring IoC 容器。跟 Spring IoC 容器相关的类、接口有 BeanFa

2022-02-23 11:11:33 612

原创 正则表达式高级用法: 分组

正则表达式高级用法: 分组分组的使用场景分组的使用方法捕获组分组的使用实例javascript 获取分组内容java 获取分组内容小结分组的使用场景在书写正则表达式时,通常情况下,我们有两种场景会使用到分组。一是:对一个子表达式进行重复;二是:想要获取到子表达式匹配到的内容。对子表达式进行重复如果需要重复单个字符,直接在字符后面加上限定符即可,例如 a+ 表示匹配1个或一个以上的a,a?表示匹配0个或1个a。但是我们如果要对多个字符进行重复的话,就需要用到 分组 。比如:(ab){3} 表

2022-02-13 09:39:29 8189

原创 正则表达式中的勉强和侵占模式的对比分析

前言前文分析过,正则中有三种模式: 贪婪、勉强、侵占。勉强模式其实比较好理解,就是尽量少的去匹配字符。贪婪和侵占模式有一些相似,但又有很大的不同,下面我们就通过实例来分析一下两者的区别。关于 贪婪、勉强、侵占 模式的对比,请点击:正则表达式中的贪婪、勉强、侵占模式到底是什么意思?正文我们再来回顾一下贪婪模式和侵占模式:贪婪模式是在表达式中单独使用正则量词 ? 、* 、+ 、{n,m} 的情况。它的特点是一次尽量多的匹配字符,但可以回退。侵占模式也叫占用模式,是在贪婪模

2022-02-13 09:36:26 271

原创 正则表达式中的贪婪、勉强、侵占模式到底是什么意思?如何进行使用?

正则表达式中的贪婪、勉强、侵占模式到底是什么意思?如何进行使用?前言正文贪婪、勉强、侵占模式对比通过实例分析贪婪、勉强、侵占贪婪模式勉强模式侵占模式小结前言不管是什么语言,基本都会用到正则表达式,可以说正则表达式是一个程序员必需要掌握的一项技能。而正则里面的难点要数 贪婪、勉强、侵占 三种模式最难理解了。接下来,就带着大家一起来分析一下 贪婪、勉强、侵占 到底是什么鬼?正文使用过正则的同学可能都知道,在正则表达式中 ? 、* 、+ 、{n,m} 等表示是贪婪模式,它们在正则里面称作量词。下面

2022-02-13 09:32:23 807

原创 【Spring源码三千问】@Lazy延迟加载与延迟注入有什么区别?

@Lazy延迟加载与延迟注入有什么区别?@Lazy 标记在 @Autowired/@Resource 注入的属性上,或者对应的 bean 类上,都可以解决循环依赖报错的问题。 那么,不同的使用方式有什么区别呢?会带来什么样不同的效果呢?

2022-01-03 14:39:26 1980 1

原创 【Spring 源码三千问】同样是AOP代理bean,为什么@Async标记的bean循环依赖时会报错?SmartInstantiationAwareBeanPostProcessor解析

同样是AOP代理bean,为什么@Async标记的bean不能被循环依赖?前言版本约定正文SmartInstantiationAwareBeanPostProcessor非 SmartInstantiationAwareBeanPostProcessor 生产代理的情况小结【老王读Spring AOP-0】SpringAop引入&&AOP概念、术语介绍【老王读Spring AOP-1】Pointcut如何匹配到 join point【老王读Spring AOP-2】如何为 Pointc

2021-12-29 19:45:34 644

原创 【Spring源码三千问】Spring AOP 中 AbstractAdvisorAutoProxyCreator、AbstractAdvisingBeanPostProcessor的区别

产生AOP代理类的两种BeanPostProcessor对比: AbstractAdvisorAutoProxyCreator vs AbstractAdvisingBeanPostProcessor 前言版本约定正文AutoProxyCreator: AbstractAdvisorAutoProxyCreatorAbstractAdvisingBeanPostProcessorAbstractAdvisorAutoProxyCreator 与 AbstractAdvisingBeanPostProces

2021-11-30 11:30:46 702

原创 【Spring源码三千问】没有AspectJ,Spring中如何使用SpringAOP、@Transactional?

没有AspectJ,Spring中如何使用SpringAOP、@Transactional前言正文为什么不加 @EnableAspectJAutoProxy 也能使用 @Transactional ?Spring 风格的 AOP : 定义 PointcutAdvisor 来使用 Spring AOP 功能Spring xml 方式定义 AdvisorSpring @Bean 方式定义 Advisor@EnableAspectJAutoProxy 的作用是什么?AutoProxyCreator 自动代理创建者

2021-11-19 19:57:47 1326 2

原创 【老王读Spring AOP-6】@Async产生AOP代理的原理

@Async产生AOP代理的原理前言版本约定正文AsyncAnnotationBeanPostProcessorAsyncAnnotationAdvisorAsyncAnnotationAdvisor 对应的 PointcutAsyncAnnotationAdvisor 对应的 Advice: AnnotationAsyncExecutionInterceptorAnnotationAsyncExecutionInterceptor 的实现原理@Async 指定异步线程池运行@Async method 支持

2021-11-11 09:35:44 1561

原创 【老王读Spring AOP-5】@Transactional产生AOP代理的原理

@Transactional产生AOP代理的原理前言版本约定正文准备一个干净极简的工程通过源码处的条件断点来研究BeanFactoryTransactionAttributeSourceAdvisorTransactionInterceptor小结系列博文:【老王读Spring AOP-0】SpringAop引入&&AOP概念、术语介绍【老王读Spring AOP-1】Pointcut如何匹配到 join point【老王读Spring AOP-2】如何为 Pointcut 匹配的类

2021-11-08 19:34:56 1700 1

原创 【Spring源码三千问】Advice、Advisor、Advised都是什么接口?

Advice、Advisor、Advised都是什么接口?前言版本约定正文Advice、Advisor、Advised 类图AdviceMethodInterceptorAdvisorPointcutAdvisorAdvisedSpring AOP 代理类可以转换为 Advised 类型小结系列博文:【老王读Spring AOP-0】SpringAop引入&&AOP概念、术语介绍【老王读Spring AOP-1】Pointcut如何匹配到 join point【老王读Spring A

2021-11-02 14:23:08 3768 1

原创 【老王读Spring AOP-4】Spring AOP 与Spring IoC 结合的过程 && ProxyFactory 解析

前言实现 Spring AOP 大体会分如下几步:找到 Pointcut 所匹配的所有 join point 对应的类为 Pointcut 匹配到的类生成动态代理通过动态代理类执行 Pointcut 对应的 Advice将 Spring AOP 与 Spring IoC 进行结合之前我们已经分析了前面三步,下面我们来看下 Spring AOP 是怎么与 Spring IoC 进行结合的。版本约定Spring 5.3.9 (通过 SpringBoot 2.5.3 间接引入的依赖)正文S

2021-10-29 11:29:42 594

原创 【Spring源码三千问】Spring动态代理:什么时候使用的 cglib,什么时候使用的是 jdk proxy?

Spring动态代理:什么时候使用的 cglib,什么时候使用的是 jdk proxy?前言版本约定正文例子测试结论分析proxyTargetClass 标识的校正哪些接口不是 ReasonableProxyInterface小结前言前面分析 Spring AOP 是如何为 Pointcut 匹配的类生成代理类时,提到 spring 使用 cglib 还是 jdk proxy 来生成动态代理是由两个因素共同决定的:第一个因素是 targetClass 的类型(接口 or 实体类);第二个因素是 p

2021-10-28 12:44:20 1410

老王读spring-ioc源码分析&测试代码.zip

老王读 Spring IoC 系列文章的源码分析&测试代码 Spring IoC 源码分析,帮助大家学习 Spring 源码,更加了解 Spring 的底层 博客专栏地址:https://blog.csdn.net/wang489687009/category_11269905.html

2021-11-19

老王读spring-aop源码分析&测试代码.zip

老王读 Spring AOP 系列文章的源码分析&测试代码 帮助大家学习 Spring 源码,更加了解 Spring 的底层 博客专栏地址:https://blog.csdn.net/wang489687009/category_11269905.html

2021-11-11

edraw破解版

绿色软件,方便你我他。文件里面有具体的安装步骤。拿走,不谢

2019-02-23

otp_win64_20.2.exe

otp_win64_20.2.exe rabbitmq erlang,rabbitmq安装必备之erlang

2017-12-27

尚学堂Spring学习笔记

尚学堂Spring学习笔记.马士兵的,看了很受用,摘录了一些

2014-03-19

Photoshop学习笔记《入门到高手的经典总结》

这是本人初学ps时,看了李涛老师的视频和一本清华大学出版社的《PS入门经典100例》之后,写学到和总结的东西,非常适合有一定的ps基础的同志提搞技术

2013-04-12

eclipse中ZK环境的搭建配置

eclipse中ZK环境的搭建配置,对于刚接触ZK的同学非常有用,我之前就是通过看这个上面的操作步骤来搭建第一个zk工程的。

2012-09-21

Java程序设计 第二版 (朱喜福 徐剑魁 著) 清华大学出版社答案

Java程序设计 第二版 (朱喜福 徐剑魁 著) 清华大学出版社 习题答案

2011-09-25

空空如也

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

TA关注的人

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