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