随笔分类 -  Spring源码阅读

摘要:一、使用示例 使用 @RestControllerAdvice 注解类,使用 @ExceptionHandler(JsonParseException.class) 指明要处理的全局异常。 import com.fasterxml.jackson.core.JsonParseException; i 阅读全文
posted @ 2022-03-17 15:05 极客子羽 阅读(781) 评论(0) 推荐(0) 编辑
摘要:源码分析 一、构造函数 org.springframework.web.method.annotation.ExceptionHandlerMethodResolver 仅有一个构造函数,源码如下: public ExceptionHandlerMethodResolver(Class<?> han 阅读全文
posted @ 2022-03-16 22:54 极客子羽 阅读(688) 评论(0) 推荐(0) 编辑
摘要:一、问题简介 如题,请求 http://localhost:8080/api/test?redirectUrl=https%3A%2F%2Fwww.baidu.com%2F&data=123 这样的 URL,Web应用服务器用以下控制器来接收: import com.example.demo.dto 阅读全文
posted @ 2022-02-10 18:02 极客子羽 阅读(2257) 评论(0) 推荐(0) 编辑
摘要:Lettuce源码阅读(一)之普通的get命令一、简介 基于Lettuce连接Redis单机和集群的客户端代码,在这篇文章中,给出了使用 Lettuce API 的大致流程。 本文将着力分析一下背后的源码。 首先,回顾一下使用 Lettuce 客户端调用 get 命令的大致流程: // 步骤1:连接信息 RedisURI redisURI = 阅读全文
posted @ 2022-01-27 14:52 极客子羽 阅读(459) 评论(0) 推荐(0) 编辑
摘要:通过阅读 LettuceConnectionConfiguration 的源码,我们知道两种在客户端代码中配置 redis-server 模式的方法: 1.配置文件:可以通过 application.properties 中的属性来设置哨兵模式,集群模式,单机模式; 2.Java代码:可以通过向 Spring 注入Bean的模式来设置哨兵模式(注入 RedisSentinelConfiguration)和集群模式(注入 RedisClusterConfiguration); Java代码优先级 > 配置文件; 另外,我们还知道如果同时存在多种模式的配置时,最终只会选取一种模式,此时就要根据优先级来判断具体选择哪一种: 哨兵模式 > 集群模式 > 单机模式 最后,就是 spring.redis.url 这个属性,对于配置 Lettuce 作为 Redis 客户端时,没啥卵用。 阅读全文
posted @ 2022-01-20 15:15 极客子羽 阅读(1123) 评论(0) 推荐(0) 编辑
摘要:简介 首先,我们翻译一下这个类的注释: RedisMessageListenerContainer 为Redis消息侦听器 MessageListener 提供异步行为的容器。处理侦听、转换和消息分派的低级细节。 与低级别Redis(每个订阅一个连接)相反,容器只使用一个连接,该连接对所有注册的侦听 阅读全文
posted @ 2022-01-15 16:27 极客子羽 阅读(10470) 评论(0) 推荐(2) 编辑
摘要:本文用较为简单的代码模拟了一下如何创建 MyBatis 的 Mapper 对象,如何把 Mapper 对象交给 Spring 管理。 阅读全文
posted @ 2020-09-20 22:10 极客子羽 阅读(443) 评论(0) 推荐(0) 编辑
摘要:研究 Spring 源码之AnnotationConfigApplicationContext 的 refresh 方法时,我们了解到 invokeBeanFactoryPostProcessors 中的后置处理器执行顺序。还了解到把对象交给 Spring 管理和把类交给 Spring 管理的差别。还了解到了 Spring 内置的 BeanDefinitionRegistryPostProcessor —— ConfigurationClassPostProcessor 中 postProcessBeanDefinitionRegistry 的主要作用就是将注解类扫描出来,并将 class 转化为 BeanDefinition 保存到 beanDefinitionMap 中去。 阅读全文
posted @ 2020-09-11 19:31 极客子羽 阅读(2072) 评论(0) 推荐(0) 编辑
摘要:Spring 事务的传播机制,支持继续使用当前事务的主要有Propagation.REQUIRED,Propagation.SUPPORTS,Propagation.MANDATORY,不支持继续使用当前事务的包括Propagation.REQUIRES_NEW,Propagation.NOT_SUPPORTED,Propagation.NEVER。还有一个与 REQUIRED 行为类似的 NESTED 嵌套传播。Spring 事务传播时,判断两个方法是否属于同一个事务,关键还得看他们是否使用相同的数据库连接。Spring 事务是基于 AOP 的,所以直接使用 this 方法会导致“事务失效”。 阅读全文
posted @ 2020-08-30 22:36 极客子羽 阅读(1158) 评论(0) 推荐(0) 编辑
摘要:本文围绕着Bean的创建过程进行了核心代码的梳理。这样大家也能更容易对 创建单例过程 的过程 有个初步的印象。并且在最后还解答了为什么BeanPostProcessor 接口对循环依赖不起作用?为什么 postProcessAfterInitialization 对循环依赖bean对象的改变不生效? 阅读全文
posted @ 2020-08-26 23:21 极客子羽 阅读(851) 评论(0) 推荐(0) 编辑
摘要:通过循坏依赖这个问题,拓展到探究Spring Bean 的简化版加载过程。本文没有一上来就贴出完整的代码,而是一步步探究,根据错误提示来引导出正确的代码片段,用错误来告诉读者 API 调用代码为什么要这样写?然后在我们了解到了Spring Bean的加载过程之后,解答 Spring 是如何解决循环依赖这个问题。 阅读全文
posted @ 2020-08-24 09:25 极客子羽 阅读(1137) 评论(0) 推荐(1) 编辑
摘要:Github: "SingletonBeanRegistry.java" SingletonBeanRegistry 阅读全文
posted @ 2019-07-11 23:47 极客子羽 阅读(1017) 评论(0) 推荐(0) 编辑
摘要:Spring源码阅读系列之DefaultListBeanFactory篇-别名注册链SimpleAliasRegistry 阅读全文
posted @ 2019-07-11 01:50 极客子羽 阅读(302) 评论(0) 推荐(0) 编辑