
Spring源码
文章平均质量分 86
本人学习spring源码过程中的总结理解
一名技术极客
在代码的海洋里,我是一名不断航行的探索者。热爱Java,热衷于深入挖掘技术细节,享受解决复杂问题的成就感。这里是我的优快云博客,记录我在编程路上的学习笔记、项目实践和对新技术的思考。
作为一名拥有多年开发经验的Java程序员,我深知学习过程中的困难与挑战。因此,我的博客会尽量用简明的语言去阐释复杂的概念,分享实用的编程技巧,以及那些在我工作过程中积累的宝贵经验。无论是初学者还是资深开发者,我都希望这里的内容能对您有所帮助。
在这个快速变化的技术世界,让我们一起保持好奇心,不断学习,共同进步。欢迎留言讨论,期待与您一起探讨编程之美!
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
SpringSecurity + JWT 实现权限系统设计方案
RBAC 全称为用户角色权限控制,通过角色关联用户,角色关联权限,这种方式,间阶的赋予用户的权限,如下图所示对于通常的系统而言,存在多个用户具有相同的权限,在分配的时候,要为指定的用户分配相关的权限,修改的时候也要依次的对这几个用户的权限进行修改,有了角色这个权限,在修改权限的时候,只需要对角色进行修改,就可以实现相关的权限的修改。这样做增加了效率,减少了权限漏洞的发生。权限是资源的集合,这里的资源指的是软件中的所有的内容,即,对页面的操作权限,对页面的访问权限,对数据的增删查改的权限。举个栗子。原创 2024-12-30 08:30:00 · 1091 阅读 · 0 评论 -
Spring AOP面向切面编程
面向切面编程是希望能够将通用需求功能从不相关的类当中分离出来,能够使得很多类共享一个行为,一旦发生变化,不必修改很多类,而只是修改这个行为即可。AOP通过提供另一种思考程序结构的方式来补充了面向对象编程(OOP)。OOP中模块化的基本单元是类(class),而AOP中模块化的基本单元是切面(aspect)。可以这么理解,OOP是解决了纵向的代码复用问题,AOP是解决了横向的代码复用问题。Spring的关键组件之一是AOP框架。原创 2024-12-30 08:30:00 · 780 阅读 · 0 评论 -
Spring AOP实现异步文件上传
相信很多系统里都有这一种场景:用户上传Excel,后端解析Excel生成相应的数据,校验数据并落库。这就引发了一个问题:如果Excel的行非常多,或者解析非常复杂,那么解析+校验的过程就非常耗时。如果接口是一个同步的接口,则非常容易出现接口超时,进而返回的校验错误信息也无法展示给前端,这就需要从功能上解决这个问题。一般来说都是启动一个子线程去做解析工作,主线程正常返回,由子线程记录上传状态+校验结果到数据库。同时提供一个查询页面用于实时查询上传的状态和校验信息。原创 2024-12-27 08:30:00 · 317 阅读 · 0 评论 -
Spring IOC实现原理之IOC高级特性
当用户通过getBean方法向IOC容器获取被管理的Bean时,IOC容器对Bean进行的初始化和依赖注入过程,这些是Spring IOC容器的基本功能特性。Spring IOC容器还有一些高级特性,如使用lazy-init属性对Bean预初始化、产生或者修饰Bean对象的生成、IOC容器初始化Bean过程中使用后置处理器对Bean声明周期事件管理和IOC容器的autowiring自动装配功能等。在前面我们分析Spring IOc容器实例化Bean并进行依赖注入过程的源码时,提到在getBean。原创 2024-12-30 08:30:00 · 669 阅读 · 0 评论 -
Spring IOC实现原理之IOC依赖注入
的getBean//获取IoC容器中指定名称的Bean//doGetBean才是真正向IoC容器获取被管理Bean的过程//获取IoC容器中指定名称和类型的Bean//doGetBean才是真正向IoC容器获取被管理Bean的过程//获取IoC容器中指定名称和参数的Bean//doGetBean才是真正向IoC容器获取被管理Bean的过程//获取IoC容器中指定名称、类型和参数的Bean//doGetBean才是真正向IoC容器获取被管理Bean的过程。原创 2024-12-27 08:30:00 · 918 阅读 · 0 评论 -
Spring IOC实现原理之IOC初始化流程
Spring IOC容器对Bean定义资源的载入是从refresh()函数开始的,refresh()是一个模板方法,refresh()方法的作用是:在创建IOC容器前,如果已经有容器存在,则需要把已有的容器销毁和关闭,以保证在refresh之后使用的是新建立起来的IoC容器。refresh的作用类似于对IoC容器的重启,在新建立好的容器中对容器进行初始化,对Bean定义资源进行载入通过调用其父类的refresh()//调用容器准备刷新的方法,获取容器的当时时间,同时给容器设置同步标识。原创 2024-12-26 08:30:00 · 1046 阅读 · 0 评论 -
Spring IOC实现原理之IOC体系结构
最主要是完成了完成对象的创建和依赖的管理注入等等。先从我们自己设计这样一个视角来考虑:所谓控制反转,就是把原先我们代码里面需要实现的对象创建、依赖的代码,反转给容器来帮忙实现。那么必然的我们需要创建一个容器,同时需要一种描述来让容器知道需要创建的对象与对象的关系。这个描述最具体表现就是我们可配置的文件。原创 2024-12-26 08:30:00 · 914 阅读 · 0 评论 -
Spring基础 - Spring 常用七大类注解
如果想要延迟初始化一个bean,那么可以在此类上使用Lazy注解,表示此bean只有在第一次被使用的时候才会被创建和初始化。上使用此注解,并且使用属性来传递值时,Spring会自动把值赋给此field。后,如果一个类仅仅只有一个构造方法,那么即使不使用此注解,那么Spring也会自动注入相关的bean。当在构造方法上使用此注解的时候,需要注意的一点就是一个类中只允许有一个构造方法使用此注解。此注解使用在方法上,声明此方法会在一个单独的线程中执行。上,声明测试使用的配置文件,此外,也可以指定加载上下文的类。原创 2024-12-25 08:30:00 · 1493 阅读 · 0 评论 -
深入掌握Flowable并将其与Spring Boot集成实现工作流
目前工作流框架最火的就是Activiti和Flowable,该文章介绍如何使用flowable,如果不想看理论的概念,可以直接跳到第五部分springboot集成flowable。Flowable起源于Activiti工作流引擎,由Activiti的主要开发者在2016年创建。它继承了Activiti的众多优点,并在此基础上进行了优化和改进,以提供更加稳定、高效的工作流管理解决方案。Flowable与Activiti有着共同的祖先,即jbpm,并随着技术的发展和需求的变化,逐渐发展成为独立且功能强大的工作流原创 2024-11-28 17:52:43 · 1765 阅读 · 0 评论 -
不好意思,HttpClient 该换了,来感受下Retrofit的魅力
Retrofit是适用于Android和Java且类型安全的HTTP客户端,其最大的特性的是支持通过接口的方式发起HTTP请求。而spring-boot是使用最广泛的Java开发框架,但是Retrofit官方没有支持与spring-boot框架快速整合,因此我们开发了。实现了Retrofit与框架快速整合,并且支持了诸多功能增强,极大简化开发。接口必须使用注解标记!http相关注解可参考官方文档:retrofit官方文档。通常情况下,通过注解属性动态创建对象能够满足大部分使用场景。原创 2024-11-14 15:07:12 · 693 阅读 · 0 评论 -
SpringBoot 如何实现多租户架构?
多租户架构是指在一个应用中支持多个租户(Tenant)同时访问,每个租户拥有独立的资源和数据,并且彼此之间完全隔离。通俗来说,多租户就是把一个应用按照客户的需求“分割”成多个独立的实例,每个实例互不干扰。原创 2024-11-05 14:48:16 · 1183 阅读 · 0 评论 -
弃用 RestTemplate,来了解一下官方推荐的 WebClient !
在 Spring Framework 5.0 及更高版本中,RestTemplate 已被弃用,取而代之的是较新的 WebClient。这意味着虽然 RestTemplate 仍然可用,但鼓励 Spring 开发人员迁移到新项目的 WebClient。设置请求超时不会有任何影响总的来说,虽然 RestTemplate 可能仍然适用于某些用例,但 WebClient 提供了几个优势,使其成为现代 Spring 应用程序的更好选择。原创 2024-11-05 14:47:58 · 1015 阅读 · 0 评论 -
SpringBoot 快速实现 api 加密!so easy~
使用RSA加密方式对API接口返回的数据加密,让API数据更加安全。别人无法对提供的数据进行破解。Spring Boot接口加密,可以对返回值、参数值通过注解的方式自动加解密。首先我们当然是了解RSA加密RSA加密是一种非对称加密。可以在不直接传递密钥的情况下,完成解密。这能够确保信息的安全性,避免了直接传递密钥所造成的被破解的风险。是由一对密钥来进行加解密的过程,分别称为公钥和私钥。两者之间有数学相关,该加密算法的原理就是对一极大整数做因数分解的困难性来保证安全性。原创 2024-11-01 15:27:39 · 1735 阅读 · 0 评论 -
Spring在多线程环境下如何确保事务一致性
注解完成的,声明式事务优点就在于让事务代码与业务代码解耦,通过Spring中提供的声明式事务使用,我们也可以发觉我们只需要编写业务代码即可,而事务的管理基本不需要我们操心,Spring就像使用了魔法一样,帮我们自动完成了。本文给出的只是一个方法,为了实现多线程事务一致性,我们还有很多方法,例如和本文一样的思想,直接利用JDBC提供的API来手动控制事务提交和回滚,或者可以尝试采用分布式事务的思路来解决问题。一次事务的完成通常都是默认在当前线程内完成的,又因为一次事务的执行过程中,涉及到对当前数据库连接。原创 2024-11-01 09:30:08 · 991 阅读 · 0 评论 -
10 种超赞的 MyBatis 写法!
如果传递的是一个List,则mybatis会封装为一个list为key,list值为object的map,如果是array,则封装成一个array为key,array的值为object的map,如果自己封装呢,则colloection里放的是自己封装的map里的key值。使用时比较灵活, new一个这样的实体类,我们需要限制那个条件,只需要附上相应的值就会where这个条件,相反不去赋值就可以不在where中判断。当where中的条件使用的if标签较多时,这样的组合可能会导致错误。原创 2024-06-12 10:08:37 · 685 阅读 · 0 评论 -
深入解析Spring Boot启动机制:从原理到实践
下图代码说明了,Spring在初始化全部 单例Bean以后,会执行接口。SpringBoot 会在Spring完全启动完成后,才开启Http流量。这给了我们启示:应该在Spring启动完成后开启入口流量。Rpc和 MQ流量也应该如此,所以建议大家 在或者等位置 注册服务,开启流量。例如服务发现组件,就是在中注册服务的!原创 2024-05-24 09:46:05 · 1283 阅读 · 0 评论 -
绝佳组合 SpringBoot + Lua + Redis = 王炸!
曾经有一位魔术师,他擅长将Spring Boot和Redis这两个强大的工具结合成一种令人惊叹的组合。他的魔法武器是Redis的Lua脚本。今天,我们将揭开这个魔术师的秘密,探讨如何在Spring Boot项目中使用Lua脚本,以解锁新的可能性和提高性能。如果你一直在寻找提升你的应用程序的方法,那么这篇博客将为你揭示其中的神奇之处。原创 2024-04-09 09:37:46 · 830 阅读 · 0 评论 -
Spring AI 来了,打造Java生态大模型应用开发新框架!
尽管 Python 长期主导 AI 大模型应用开发领域,但 Java 并未熄火!Spring AI 来了,正式告别实验期,迈向广泛应用新阶段!这意味着 Spring 生态体系的广大开发者,迎来 AI 大模型应用开发的新里程。原创 2024-04-07 08:48:33 · 6244 阅读 · 1 评论 -
构建现代Java应用:选择Spring还是Spring Boot?深入对比分析
在Java的企业级应用开发领域,Spring和Spring Boot是两个广受欢迎且经常被讨论的框架。尽管它们之间存在诸多联系,但也有不少显著的差异。本文旨在深入解析这两个框架的主要区别,并阐述它们各自的特点和适用场景。原创 2024-04-03 09:23:01 · 1030 阅读 · 0 评论 -
加密无忧:SpringBoot中快速搭建安全的API接口
该项目使用RSA加密方式对API接口返回的数据加密,让API数据更加安全。别人无法对提供的数据进行破解。Spring Boot接口加密,可以对返回值、参数值通过注解的方式自动加解密。首先我们当然是了解RSA加密RSA加密是一种非对称加密。可以在不直接传递密钥的情况下,完成解密。这能够确保信息的安全性,避免了直接传递密钥所造成的被破解的风险。是由一对密钥来进行加解密的过程,分别称为公钥和私钥。两者之间有数学相关,该加密算法的原理就是对一极大整数做因数分解的困难性来保证安全性。原创 2024-04-04 08:30:00 · 1781 阅读 · 0 评论 -
springboot使用jasypt对配置文件加密,加密数据库连接
Jasypt是一个Java库,用于加密和解密文本。它支持多种加密算法,如PBEWithMD5AndDES、PBEWithMD5AndTripleDES、PBEWithSHA1AndDESede等原创 2024-01-23 12:19:50 · 608 阅读 · 0 评论 -
7 种提升 SpringBoot 吞吐量神技!
这两个方法如果在不指定线程池的情况下,都是在 ForkJoinPool.common 线程池中执行,而这个线程池中的所有线程都是 Daemon(守护)线程,所以,当主线程结束时,这些线程无论执行完毕都会退出系统。CompletableFuture.supplyAsync 方法构造一个 CompletableFuture 实例,在 supplyAsync() 方法中,它会在一个新线程中,执行传入的参数。使用异步注解 @aysnc、启动类:添加 @EnableAsync 注解。这里不给大家举例,可自行尝试。原创 2024-01-16 11:52:10 · 437 阅读 · 0 评论 -
Spring 中几种不能扫描为Bean的情况
Spring 中几种不能扫描为Bean的情况此处仅贴出展示,细节不做过多展示,感兴趣的小伙伴可以自己尝试去了解一下;Spring 扫描源码中已经提到以下几种情况不可作为Bean:非顶级类不可成为Bean(即普通的内部类,静态内部类除外);接口以及抽象类不可成为Bean;如果是抽象类,其中有一个特例:在方法中添加一个@Lockup()注解,即可成为Bean;...原创 2021-12-07 14:06:51 · 1137 阅读 · 0 评论 -
Spring之Bean生命周期源码解析(上)
Spring之Bean生命周期源码解析原创 2021-12-06 11:18:23 · 174 阅读 · 0 评论 -
Spring 之底层架构核心概念解析
Spring 是目前主流的 Java Web 开发框架,是 Java 世界最为成功的框架。该框架是一个轻量级的开源框架,具有很高的凝聚力和吸引力原创 2021-12-02 17:07:18 · 689 阅读 · 0 评论 -
SpringBean 懒加载与非懒加载
SpringBean 懒加载与非懒加载概念区别实现方式xml形式注解形式概念懒加载告诉spring容器是否以懒加载的方式创造对象。用的时候才加载构造,不用的时候不加载非懒加载告诉spring容器是否以非懒加载的方式创造对象。容器启动的时候立刻创建对象区别对象使用的时候才去创建,节省资源,但是不利于提前发现错误。容器启动的时候立刻创建对象。消耗资源。利于提前发现错误。-当scope=“prototype” (多例)时,默认以懒加载的方式产生对象。当scope=“singleton”原创 2021-11-23 16:44:48 · 1159 阅读 · 0 评论 -
手写简单的Spring底层
废话不多少直接上代码spring 常用注解先定义一下@Retention(RetentionPolicy.RUNTIME)@Target(ElementType.FIELD)public @interface Autowired {}@Retention(RetentionPolicy.RUNTIME)@Target(ElementType.TYPE)public @interface Component { String value() default "";}@Reten原创 2021-11-23 16:02:35 · 354 阅读 · 0 评论 -
Spring底层核心原理解析
Spring底层核心原理解析Spring中是如何创建一个对象?Bean的创建过程推断构造方法AOP大致流程Spring事务本篇博客是对Spring的底层有一个整体的大致了解Bean的生命周期底层原理依赖注入底层原理初始化底层原理推断构造方法底层原理AOP底层原理Spring事务底层原理但都只是大致流程,后续会针对每个流程详细深入的讲解并分析源码实现。先来看看入门使用Spring的代码:ClassPathXmlApplicationContext context = new Cla原创 2021-11-22 14:02:22 · 344 阅读 · 0 评论