![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Spring框架篇
文章平均质量分 85
Spring框架篇包括Spring 项目搭建,组件使用
拽着尾巴的鱼儿
The harder you work, the luckier you are
展开
-
面试篇-Spring-2+Spring-mvc+Mybatis+Springboot
你们用过Spring-mvc 吗,一条Http 请求的只修改流程是怎样的,Springboot项目的自动装配是怎样的,存储的orm 框架Mybatis 你们用到了吗,他的一二级缓存是怎样的。本文重点对面试的问题进行介绍,祝愿每位程序员都能顺利上岸!!!本文对Spring-Mvc 的执行过程,Mybatis Orm 框架,以及对Springboot 的自动装配常见面试内容进行的整理。原创 2024-07-14 10:56:51 · 902 阅读 · 0 评论 -
面试篇-Spring-1+ioc+bean的生命周期+aop+事务支持+循环依赖
你们项目中使用过Spring吗,你知道Spring 的IOC和AOP吗,你知道bean的工作过程吗,你知道Spring 是怎么解决循环依赖吗,Spring 中的事务底层实现原理是怎样的。本文重点对面试的问题进行介绍,祝愿每位程序员都能顺利上岸!!!Spring 中的三级缓存,通过提前暴露bean 来解决循环依赖的问题。本文对Spring 框架中,常见的如:Spring bean 的生命周期,bean 的循环依赖,Aop 以及事务的底层原理面试问题进行总结。原创 2024-07-14 10:56:34 · 589 阅读 · 0 评论 -
分布式事务篇-2.3 Seata事务模式
Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式,为用户打造一站式的分布式解决方案,他们每种事务模式的原理是什么,在实际使用中应该选择哪种事务模式。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式,其中AT 和XA 提供了强一致性的模式,TCC 和SAGA 提供最终一致性的模式。原创 2023-08-25 16:09:55 · 443 阅读 · 0 评论 -
源码篇--Nacos服务--中章(8):Nacos服务端感知客户端实例变更(集群数据校验)-4
本文对Nacos 集群节点间实例数据校验过程进行介绍,服务端版本 3.0.13。本文对集群内节点间的心跳监测,以及实例信息的检查和同步做介绍。原创 2024-04-29 14:27:26 · 629 阅读 · 0 评论 -
源码篇--Nacos服务--中章(8):Nacos服务端感知客户端实例变更-3
Nacos 集群中的节点通过distro 协议,grpc 通信互相同步节点中的实例信息;本文对服务端实例同步的3种场景进行介绍;服务端版本 3.0.13。本文对Nacos 集群内实例注册的感知,对实例的注册;Nacos 集群节点启动,实例信息的同步进行介绍。原创 2024-04-29 14:26:41 · 911 阅读 · 0 评论 -
源码篇--Nacos服务--中章(8):Nacos服务端感知客户端注册-2
当客户端的实例注册到nacos 集群中某一台节点后,此时需要给集群中其它的节点推送节点注册实例信息,从而保证数据的最终一致性协议。集群的节点之间通过建立grpc 连接实现消息的发送,本文对服务端nacos 集群间节点grpc 连接建立,进行介绍,服务端版本 3.0.13。本文对集群内节点之间通过建立grpc 连接过程进行介绍。原创 2024-04-29 14:25:09 · 442 阅读 · 0 评论 -
源码篇--Nacos服务--中章(8):Nacos服务端感知客户端注册-1
本文对Nacos 服务端对客户端的注册实例请求过程进行阐述,服务端版本 3.0.13。本文对Nacos 服务端对客户端的注册实例请求过程进行阐述。原创 2024-04-29 14:24:23 · 373 阅读 · 0 评论 -
源码篇--Nacos服务--中章(7):Nacos客户端重连的4中场景
本文对 nacos 客户端的重新连接nacos 服务端的4中场景进行介绍,环境:客户端版本2.2.1,客户端将springboot 3.0.13。本文对Nacos客户端重连的4中场景和服务端的处理进行介绍。原创 2024-04-29 14:22:59 · 837 阅读 · 0 评论 -
源码篇--Nacos服务--中章(2):Nacos服务端启动--集群寻址
源码篇–Nacos服务–中章(1):Nacos服务端的启动;本文对Naoc 集群的寻址进行介绍;本文对 Nacos服务端启动–集群/单机寻址方式进行介绍。原创 2024-04-19 16:54:58 · 1154 阅读 · 0 评论 -
源码篇--Nacos服务--中章(1):Nacos服务端的启动
在源码篇–Nacos服务–前章我们对nacos 的架构及其概念进行了介绍,本文从源码层面对nacos 服务端资源的加载进行介绍;@Override// 自定义的环境变量 设置本文从源码层面对nacos 服务端资源的加载进行介绍。原创 2024-04-19 16:53:23 · 1031 阅读 · 0 评论 -
框架篇--springboot 客户端 整合& Nacos 版本问题
本文对 pringboot 客户端 整合Nacos 过程中出现的版本问题 进行记录;本文对 pringboot 客户端 整合Nacos 过程中出现的版本问题 进行记录;原创 2024-03-20 15:23:20 · 2882 阅读 · 0 评论 -
工具篇--分布式定时任务springBoot--elasticjob ElasticJobListener 的加载
本文对 定义的SPI 监听器 加载实现做介绍。在 Spring Boot 中,SPI(Service Provider Interface)是一种机制,用于实现组件化和扩展性。SPI机制允许开发者在运行时动态地加载并执行接口的实现类,从而降低耦合、增强可扩展性,并使应用程序更容易扩展和定制。定义接口:首先,您需要定义一个接口,该接口包含需要被实现的方法。这个接口定义了一组可扩展的功能或服务点。实现接口:然后,您可以创建一个或多个实现了该接口的类。这些类将提供接口定义的功能,并作为可插拔的组件。原创 2024-03-13 17:32:56 · 979 阅读 · 0 评论 -
工具篇--分布式定时任务springBoot 整合 elasticjob使用(3)
本文对springBoot 整合 elasticjob 进行介绍。本文环境 jdk:1.8;// 分片参数 0=text,1=image,2=radio,3=vedio String shardingParameter = shardingContext . getShardingParameter();原创 2024-03-12 21:15:04 · 1832 阅读 · 1 评论 -
工具篇--分布式定时任务springBoot--elasticjob使用--工作流程(2)
本文对elasticjob 的工作流程介绍;ElasticJob 定位为轻量级无中心化解决方案,使用 jar 的形式提供分布式任务的协调服务。app1,app2 表示不同的服务系统,每个系统都可以 引入elasticjob-lite-core jar 进行定时任务的执行;elasticjob-lite-core 内部包括,任务执行实例的注册,leader 的选举,任务的调度;在任务调度过程中可以将日志进行保存到 数据库中;ELK 可以对保存到数据库中的日志进行分析;原创 2024-03-12 21:14:21 · 1239 阅读 · 0 评论 -
Springboot--整合Mybatis与定时任务quartz
在Springboot–整合定时任务quartz–集群篇中已经介绍了如何集群并使用quartz ,但是我们并不想每个定时任务都去重复的创建JobDetail 和 Trigger,那么是否可以将任务存储在mysql 中,然后在项目启动完成后,统一的去加载任务呢,答案是肯定可以的;通过将任务存储于mysql 中,在项目启动后可以获取所有任务,封装JobDetail和 CronTrigger并交由quartz 管理;原创 2024-02-23 15:03:44 · 966 阅读 · 0 评论 -
工具篇--SpringCloud--openFeign--日志输出
在项目中当使用openFeign 调用远程接口,当接口联调时可能需要对feign 接口调用的情况进行日志打印。本文列举了在使用openFeign 怎么对日志的输出进行设置。原创 2024-01-04 15:56:27 · 3549 阅读 · 0 评论 -
工具篇--SpringBoot与SpringCloud 的版本对应关系&SpringBoot与JDK对应关系(官网文档解释)
通常我们创建springboot 项目时都会用的springcloud 框架对springboot 进行整合,所以此时就非常有必要了解他们之间的版本对应关系了,最准确的信息就需要到官网进行了解。本文按照Spring 的官网对-SpringBoot与SpringCloud 以及SpringBoot与JDK 的版本对应关系进行整理。原创 2024-01-04 15:55:09 · 6789 阅读 · 1 评论 -
Spring-MVC--ControllerAdvice 全局控制器增强
ControllerAdvice 除了可以完成全局异常的处理,同时也可以在真正调用方法之前对body 中的请求参数进行处理,以及在对body 数据相应写回之前对数据进行处理;原创 2023-12-19 14:58:28 · 648 阅读 · 0 评论 -
Spring-MVC 源码分析--DispatcherServlet 请求分发&访问&返回
Spring-MVC 对DispatcherServlet 完成初始化之后,下面看下一个http 请求是如何被分发到不同请求处理handlerMapping。本文主要对DispatcherServlet 的请求分发,请求参数,请求结果的包装返回 在原码层面进行了流程上的分析;原创 2023-12-19 14:58:05 · 307 阅读 · 0 评论 -
Spring-MVC 源码分析--DispatcherServlet 初始化
我们知道一个http 请求到达服务端后是通过DispatcherServlet 进行请求的分发,而分发的逻辑具体就是要找到这个请求合适的HandleMapping 来处理,那么HandleMapping 是什么,它是怎么根据请求路径判断 哪个HandleMapping 来处理请求呢,HandleMapping 分发请求后,怎么完成对方法参数的解析,又是如何将方法的返回值给封装成浏览器需要的对象?原创 2023-12-19 14:57:34 · 67 阅读 · 0 评论 -
Spring-MVC web 实现http 请求的三种方式
对于web http 请求我们在项目里常用的就是@Controller/@RestController 定义类,并且通过@RequestMapping 定义控制器的路径,除了常见的这种web 请求,实际上在mvc 层面还提供了另外两种的路由方式。此种适应于WebFlux ,如果我们在gateWay 网关想要处理http 请求,因为gateWay 使用了WebFlux 并没有使用传统的Spring MVC 所以此时就需要通过定义RouterFunction 类型的bean来实现;/**原创 2023-12-19 14:57:08 · 549 阅读 · 0 评论 -
Spring- 事务底层源码解析(一步步看总能明白)
在Spring项目中我们通产只需要在启动类上通过@EnableTransactionManagement 开启事务,然后在我们需要增加事务的类/方法上增加@Transactional 注解接口,那么Spring 底层对于事务是如何实现的。可以在自己的业务中,监听一个方法执行时,事务的状态流转信息;@Override// 当前test 方法的事务 被挂起后执行@Override// 当前test 方法的事务 被挂起恢复后执行@Override@Override。原创 2023-12-11 13:55:10 · 250 阅读 · 1 评论 -
Spring-Aop 底层源码解析--Spring中Aspect切面逻辑的实现
在Spring项目中我们可以在启动类上开启切面,并为已经存在的bean 增加@Aspect 声明为切面类,这样就可以为特定bean 中的方法增加对应的逻辑,那么Spring对于@Aspect 是如何支持的呢?可以看到注如了一个AspectJAutoProxyRegistrar 类型的 bean// bean 的注册 ,注册 AnnotationAwareAspectJAutoProxyCreator 类型的bean。原创 2023-12-06 16:37:15 · 278 阅读 · 0 评论 -
Spring-Aop 底层源码解析--Spring 如何通过代理进行Aop
Spring 中所谓的Aop 就是为已经存在的bean ,动态的插入一段代理逻辑,从而实现某些指定的方法进行增强。本文列举了通过 Spring 中的BeanNameAutoProxyCreator ,DefaultPointcutAdvisor 来为bean 进行代理逻辑的实现,并对底层使用的ProxyFactory 工作原理进行介绍。原创 2023-12-06 16:36:54 · 83 阅读 · 0 评论 -
Spring-Mybatis源码解析--手写代码实现Spring整合Mybatis
Spring 项目中我们只需要通过简单的注解及bean 定义就可以实现对Mybatis 的整合,便我们直接进行CRUD的,那么Spring 底层是如何对Mybatis进行处理的,本文通过手写代码实现Spring整合Mybatis。我们在启动类的配置文件ConfigMybatis 中来定义SqlSessionFactory 的bean;// 定义 SqlSessionFactory 方便通过 SqlSessionFactory 执行sql@Bean。原创 2023-11-30 15:09:04 · 109 阅读 · 0 评论 -
Spring-Mybatis源码解析--Mybatis配置文件解析
Spring 整合Mybatis 后,如何对其配置文件进行加载和解析,如何进行数据的CRUD。Spring 中主要通过 SqlSessionFactoryBuilder().build(reader) 方法完成 事务管理器,数据源以及sql 语句的解析和绑定,并将解析好的sql 放入到map 中,执行时通过key 获取具体的sql 语句交由执行器执行,然后返回执行结果。原创 2023-11-29 15:53:31 · 158 阅读 · 0 评论 -
Spring全家桶源码解析--2.7 Spring启动过程
了解Spirng 的启动过程,可以知晓Spring 中对于BeanDefinition 的生成和不同类型bean 的创建工作,了解bean 的前置后置处理器,可以在定义bean 的时候知晓其工作的原理。invokeBeanFactoryPostProcessors 扫描生成bean 定义:通过beanFactory 的后置处理器去扫描生成bean 定义// 调用 beanFactory 的后置处理器if (!原创 2023-11-14 11:02:51 · 184 阅读 · 0 评论 -
Spring全家桶源码解析--2.6 Spring scope 限制bean的作用范围
在Maven 中我们可以通过 标签来现在依赖的作用范围,在Spring 中也提供@Scope 注解来限制bean 的作用范围。不同bean的作用范围 图解:Spring 通过@Scope 注解为bean 定义需要的声明周期,Singleton(单例):默认的作用范围,每个Spring容器中只会存在一个Bean实例。Prototype(原型):每次获取Bean时都会创建一个新的实例。Request(请求):每个HTTP请求都会创建一个新的实例,该实例仅在当前请求内部有效。原创 2023-11-14 10:58:39 · 140 阅读 · 0 评论 -
Spring全家桶源码解析--2.5 Spring bean 推断构造方法创建bean
Spring 通过构造方法完成对象的创建,那么当改类中有多个构造方法时,spring 会选用哪个构造方法来创建对象;只有一个构造方法(无参或者有参是否有被@Autowired):直接使用这个构造方法;只有一个默认的无参构造方法,则通过推断方法获取到的 构造方法数组是 null,此时直接使用无参构造方法创建对象;原创 2023-11-14 10:55:16 · 101 阅读 · 0 评论 -
Spring全家桶源码解析--2.4 Spring bean 的依赖注入--@Resource
Spring 中不仅可以使用Spring 包中的@Autowired 还可以使用java 层面提供的@Resource 进行依赖注入。@Resource 获取bean 的情况总结:没有指定name 和type :没有指定名称,指定type;先按照名称去找,如果找到则进行装配(如果和实际需要的类型不一致则会报错),如果找不到则按照类型取获取;指定name,不指定type:直接按照名字去获取,找到一个自动装配(如果和实际需要的类型不一致则会报错,找不到则报错。原创 2023-11-14 10:46:26 · 200 阅读 · 0 评论 -
Spring全家桶源码解析--2.3 Spring bean 的依赖注入--@Autowired&@Value
在bean完成实例化后之后,还需要对其属性值进行填充。本文介绍@Autowired&@Value 依赖注入在bean 实例化之后 通过populateBean 对属性和方法的入参进行依赖注入,首先扫描记录哪些属性和方法需要进行依赖注入,AutowiredAnnotationBeanPostProcessor 的 postProcessMergedBeanDefinition @Autowired 和@Value 注解的属性和方法的注入点;原创 2023-11-14 10:44:03 · 116 阅读 · 0 评论 -
Spring全家桶源码解析--2.2 Spring bean 的创建
spring在启动时完成了对需要生成bean 的BeanDefinition 定义,在finishBeanFactoryInitialization(beanFactory) 对bean 进行生成,bean的生成过程中,spring 也提供一些扩展点供开发者使用,如在bean 的实例化之前,实例化之后,初始化之前,初始化之后,所有的bean 都完成实例化和初始化之后 均可以进行扩展。原创 2023-11-14 10:39:20 · 83 阅读 · 0 评论 -
Spring全家桶源码解析--2.1 Spring bean 的创建--包的扫描
Spring 中通过不同的bean 负责不同的功能,那么spring 在加载的时候,怎么知道哪些类需要去生成bean?在spring 的启动类中可以添加 @ComponentScan 并且 定义扫描的bean路径,从而在spring 启动的时候,可以知晓从哪些地方的类需要去生成bean。main。原创 2023-11-14 10:32:36 · 49 阅读 · 0 评论 -
Spring全家桶--2 Spring bean 的创建过程代码演示
本篇通过代码方式演示spirng bean 完整的生命周期。原创 2023-11-14 10:28:50 · 48 阅读 · 0 评论 -
Spring全家桶--1 Spring 原理概览
Spring是一个开源的Java框架,旨在简化企业级Java应用程序的开发。它提供了一个全面的编程和配置模型,可用于构建各种类型的应用程序,包括Web应用程序、企业应用程序、移动应用程序等,在项目的开发中每位研发都会与之打交道。此篇文章只对Spring 的核心原理进行大概的讲解,后续文章会对bean 的推断构造方法,三级缓存,AOP 代理增强,Bean的生命周期进行详细讲解。原创 2023-11-14 10:25:16 · 85 阅读 · 0 评论 -
MyBatis-Plus多数据源dynamic-datasource解决多数据源Redis Key 重复问题
在使用ynamic-datasource 因为多个租户共用一个系统,但是每个租户设置的缓存资源必须是隔离的,不然就会造成redis 缓存数据混乱的情况,如 租户1 设置key为name value 为张三的缓存,其他的租户因为缓存key 也是相同的,造成多租户缓存的数据没有做到隔离性。");} // 重要方法,在这里对key 的序列化完成自定义处理 ,追加数据源标识 public byte [ ] serialize(@Nullable String string) {原创 2023-10-11 10:35:59 · 316 阅读 · 0 评论 -
关于OpenFeign 接口参数定义的问题
在使用feign 接口进行远程或者内部服务间的方法调用时,有时会遇到明明声明了GET请求,但是feign 依然使用POST进行发送,或者使用GET 请求是明明已经放入了参数,依然提示参数值是空的,使用了异步线程调用feign 接口总是失效。提示:以下是本篇文章正文内容,下面案例可供参考本文对feign 接口在使用过程中遇到的常见问题,进行分析以及给出解决办法。原创 2023-09-18 17:55:18 · 463 阅读 · 0 评论 -
分布式事务篇-2.4 Spring-Boot整合Seata
在了解了Seata 的工作原理后,如何在springboot 项目中进行整合使用,本文进行阐述。提示:本文使用 seata 版本 :1.5;在整合之前 你需要先要部署seate 的服务本文通过springboot 项目整合seata 然后 通过 AT,XA,TCC 事务模式,模拟实现分布式事务。原创 2023-08-25 16:16:04 · 2130 阅读 · 0 评论 -
分布式事务篇-1 分布式事务介绍
随着微服务的兴起,当之前出现在单体服务中的事务,在多个服务节点中如何保证数据的一致性,本文对此进行介绍。CAP定理是分布式系统设计中的基本原则,指出在一个分布式系统中,Consistency(一致性)、Availability(可用性)和Partition tolerance(分区容错性)这三个属性无法同时满足。根据CAP定理,一个分布式系统只能满足其中两个属性。由于网络的不确定性所有P 肯定存在,C和A 肯定是矛盾的;要么随时高可用来看保证强一致性(AP),要不损失强一致性来保证高可用性(CP);原创 2023-08-25 16:05:58 · 101 阅读 · 0 评论 -
工具篇6--kafka消息模型介绍
2.1)首先KafkaTemplate 它默认没有开启事务的支持,所以需要先开启事务(事务开启的方式可能跟kafka客户端的版本有关,此处不在进行列举 本篇的demo 通过配置transactional.id 参数开启事务消息),需要注意的是当一个 KafkaTemplate 对象开启了事务之后,仅可以发送事务消息,而不能发送非事务消息,所以需要在项目中定义两个KafkaTemplate ,一个用来发送普通消息,一个用来发送事务消息;为了便于消息的检索,为其创建了消息索引,消息的存储可以参考下图。原创 2023-06-21 14:07:01 · 754 阅读 · 0 评论