自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(68)
  • 资源 (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 1161

原创 【老王读 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 776 1

原创 【老王最佳实践-6】Spring 如何给静态变量注入值

有些时候,我们可能需要给静态变量注入 spring bean,尝试过使用 @Autowired 给静态变量做注入的同学应该都能发现注入是失败的。

2024-05-22 12:42:26 253

原创 【老王最佳实践-5】spring 多线程池的配置及使用&利用FactoryBean做参数配置化技巧

在 Spring 中使用异步线程池时非常方便的,只需要在被执行的方法上加上@Async就行。开启 Spring 异步需要添加配置 @EnableAsync但是,有时我们可能需要多个异步线程池,最好每个线程池都是可配置的。多个线程池给不同的业务场景来使用,防止线程池卡死,或者任务堆积影响到其他业务。

2024-05-21 19:43:07 273

原创 【老王最佳实践-4】一招解决bean的优先加载问题

有时,我们会碰到一个 bean 在使用时,却没有被 spring 容器加载。例如下面的 PropertiesHelper 类,我们在另一个类 FooService 中使用了静态方法来获取配置值,却报了空指针。碰到这种问题,通常的做法就是在 FooService 加载前,让 PropertiesHelper 优先加载,比如使用 @DependOn 或者 在 FooService 中 @Autowired 自动注入 PropertiesHelper。

2024-05-21 12:47:29 332

原创 【老王最佳实践-3】展示逻辑与业务逻辑分离解耦

需求开发过程中,我们可能经常会碰到需要将 db 中查出的数据做单位转换,比如:db 中存的是分,页面需要展示为元;有时,又需要做类型映射,比如:db中存的 type=1 表示人民币,type=2 表示美元,前端需要展示汉字。如果你将这些展示层的逻辑放在业务代码里面来做,那么真正核心的业务逻辑代码将淹没在一堆代码里面,不易维护。怎么样可以更加优雅的处理这些与核心业务不太相关的逻辑呢?

2024-05-16 20:28:38 197

原创 【老王最佳实践-2】SpringBoot 多种类型配置同时使用出奇效

所有用到 SpringBoot 的同学都知道,SpringBoot 是同时支持 yml 和 properties 格式的配置的。比如,在项目中,我们可以使用 application.yml 或者 application.properties 文件来编写配置。大部分人都以为 SpringBoot 的文件配置是 二选一,要么使用 application.yml ,要么使用 application.properties。

2024-05-16 20:15:02 278

原创 【老王最佳实践-1】将第三方类纳入 Spring 管理,做成可配置化

有些时候,我们需要将一些第三方库中的配置类纳入到 spring 的管理,比如:配置线程池参数,怎么做比较优雅呢?如果是 spring xml 的话,我们可能使用 spring 的属性注入来进行配置。在 springboot 中,可以怎样优雅的进行配置呢?

2024-05-16 20:10:29 123

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

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

2023-05-24 19:49:42 2065

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

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

2023-05-24 19:45:46 1014

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

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

2023-05-24 19:37:16 1267

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

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

2023-05-24 19:31:32 944

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

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

2023-05-24 19:25:00 528

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

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

2023-04-27 12:32:39 452

原创 【老王读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 630

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

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

2023-04-25 21:13:17 549

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

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

2023-04-25 20:54:44 530

原创 【老王读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 362

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

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

2023-03-22 11:35:11 996

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

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

2023-03-21 10:27:54 334

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

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

2023-03-14 20:34:02 1795

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

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

2023-03-08 18:56:49 208

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

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

2023-03-08 12:36:13 1250

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

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

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

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

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

2023-02-28 12:50:08 1309

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

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

2023-02-27 10:05:54 1481

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

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

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

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

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

2023-02-15 12:48:24 415

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

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

2023-02-10 12:59:39 2307

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

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

2023-02-08 10:14:32 710

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

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

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

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

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

2022-08-31 14:43:34 531

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

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

2022-08-08 19:58:03 553

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

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

2022-02-23 11:11:33 640

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

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

2022-02-13 09:39:29 9559

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

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

2022-02-13 09:36:26 280

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

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

2022-02-13 09:32:23 840

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

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

2022-01-03 14:39:26 2183 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 684

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

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

2021-11-30 11:30:46 726

老王读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关注的人

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