spring源码系列
文章平均质量分 83
_wanghao_
这个作者很懒,什么都没留下…
展开
-
可能是最卷的Spring源码系列(十九):springboot
原创 2022-01-24 09:30:00 · 210 阅读 · 0 评论 -
可能是最卷的Spring源码系列(十八):springmvc
本文基于全注解的方式进行配置springmvc,所以源码分析的是注解方式的,但xml方式的实现也是类似的,只要搞懂其中一种方式,另一种方式就不在话下了。先简单回忆一下xml使用springmvc的步骤:1、web.xml配置上DispatcherServlet,并且指定rootContext、mvcContext的配置文件路径2、编写rootContext、mvcContext的配置文件同样,注解的方式也是这几个步骤1、创建一个WebConfiguration继承AbstractAnnotatio原创 2022-01-21 09:30:00 · 350 阅读 · 0 评论 -
可能是最卷的Spring源码系列(十七):spring-mybatis
本文会讲到mybatis的使用和核心原理分析、spring-mybatis的整合原理,目的是真正搞明白mybatis是如何使用spring的扩展点的Mybatis部分mybatis的简单使用我们通常都是在spring环境下使用mybatis,那么mybatis在非spring的环境下mybatis是如何使用呢?下面将会采用注解的方式来使用mybatis DataSource dataSource = BlogDataSourceFactory.getBlogDataSource(); Tran原创 2022-01-19 09:00:00 · 452 阅读 · 0 评论 -
可能是最卷的Spring源码系列(十六):异步
本文将会从java实现异步的方式出发,到spring对异步的支持,再到spring中异步的实现,希望通过本文章能把异步的基本部分讲透彻。异步提到异步,肯定要提到同步的概念,那么我们就对比着来理解这两个概念。其实我们写的大部分程序都是同步执行的。对于同步,最简单的理解方式就是当一行代码执行完后才能执行下面的一行代码。同理,异步就是两行代码可以同时执行,我们知道cpu是可以同时执行多个任务的,不管是通过多核还是多线程都可以实现,操作系统层面给我们提供了进程和线程相关的系统调用,使得我们可以把两个任务交给cp原创 2022-01-18 09:30:00 · 187 阅读 · 0 评论 -
可能是最卷的Spring源码系列(十五):事务
原创 2022-01-17 09:30:00 · 274 阅读 · 0 评论 -
可能是最卷的Spring源码系列(十四):AOP
从本篇开始,spring的主要流程已经分析完毕了,接下来会对spring中几个重要的实现进行分析,虽然重要,但是即使跳过也不会影响你对spring源码的理解,所以如果你对前面的内容还不熟悉,请先完成前面的学习再来学习接下来的内容。aop的使用如果想要以注解的方式配置aop,需要进行如下配置1、首先在配置类上加上@EnableAspectJAutoProxy注解2、配置切面和通知,该类除了加@Component注解外,还要加@Aspect注解@Aspect@Componentpublic cla原创 2022-01-14 09:30:00 · 157 阅读 · 0 评论 -
可能是最卷的Spring源码系列(十三):beanFactory.preInstantiateSingletons() 方法解析
preInstantiateSingletons方法也是spring中最重要的方法之一,bean的实例化、aop、生命周期的执行等重要的步骤都是在这里面执行。有了上篇循环依赖的基础,我们一定能把这个方法分析透彻。finishBeanFactoryInitializationprotected void finishBeanFactoryInitialization(ConfigurableListableBeanFactory beanFactory) { // Initialize convers原创 2022-01-10 21:32:05 · 875 阅读 · 0 评论 -
可能是最卷的Spring源码系列(十二):循环依赖
看过太多关于讲循环依赖的文章,感觉大部分都只讲到了循环依赖是怎么实现的,暂时还没有看到有文章能真正讲明白为什么要使用三级缓存,所以这篇本来计划在后面写的文章就率先被安排了。缓存级别的定义在分析spring注解之前我们先要达成一个共识,就是对三个级别缓存的定义,所以本篇文章中对三个级别的缓存有如下定义:// 一级缓存 单例池private final Map<String, Object> singletonObjects = new ConcurrentHashMap<>原创 2021-12-24 09:30:00 · 374 阅读 · 0 评论 -
可能是最卷的Spring源码系列(十一):spring中的事件
spring实现了时间订阅发布的功能,所以使用spring时就不再需要自己实现或者使用jdk自带的观察者模式,使用spring自带的订阅发布功能即可。本文会从源码的角度来分析spring中事件的实现观察者模式public class Client { public static void main(String[] args) { // 被观察者(发布者) ISubject<String> observable = new ConcreteSubje原创 2021-12-23 10:00:00 · 421 阅读 · 0 评论 -
可能是最卷的Spring源码系列(十):spring中的国际化
最近的几篇文档都在解析refresh()方法,按照代码的实现逻辑,接下来该分析的是initMessageSource()方法,但是这个方法的实现非常简单,无非是往spring容器里面注册了相关的主键,具体的实现都在组件里面,但是我们现在只分析spring的主流程,为了保证文章的连贯性,这里我们只分析initMessageSource方法的作用,和spring中国际化的使用,关于组件的具体实现,我们放在主流程分析完后再进行分析。initMessageSourceprotected void initMes原创 2021-12-22 21:05:34 · 657 阅读 · 0 评论 -
可能是最卷的Spring源码系列(九):registerBeanPostProcessors方法解析
截止到目前,我们已经完成了refresh()方法中的invokeBeanFactoryPostProcessors方法的解析,我个人认为invokeBeanFactoryPostProcessors方法是spring中最复杂的方法之一,所以如果你还对invokeBeanFactoryPostProcessors不太熟悉,请先阅读该系列的前面的几篇文章。今天要解析的registerBeanPostProcessors比起前面的内容要简单的多,所以对于这个方法我们只做简单分析。首先,我用一句话概括这个方法的作用原创 2021-12-21 22:13:28 · 280 阅读 · 0 评论 -
可能是最卷的Spring源码系列(八):ConfigurationClassPostProcessor
本文分析最重要的一个PostProcessor,如果还不了解PostProcessor,请先阅读上篇文章,ConfigurationClassPostProcessor完成了对配置类的解析,我们知道配置类通常通过构造方法或者register方法注册到容器中,那么是不是通过这两种方法注入的类都是配置类呢?所以分析之前我们提出两个问题:1、spring会把什么样的类判断为配置类?2、ConfigurationClassPostProcessor关键步骤有哪些?分析的过程我们就围绕这两个问题Config原创 2021-12-19 00:04:34 · 423 阅读 · 0 评论 -
可能是最卷的Spring源码系列(七):BeanFactoryPostProcessors源码分析
BeanFactoryPostProcessors调用时机前面的文章讲到通过BeanFactoryPostProcessors来扩展spring的方法,那么BeanFactoryPostProcessors究竟是什么时候执行到的呢?本文会通过分析容器的初始化流程来讲到BeanFactoryPostProcessors的调用的时机AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(Consu原创 2021-11-20 18:32:35 · 445 阅读 · 0 评论 -
可能是最卷的Spring源码系列(六):spring扩展点
为什么要扩展spring?我们在使用spring时,通常是单个注入bean,包括使用@bean注解、xml中的bean标签,以及包扫描都是在单个注入,把包扫描也归结为单个注入是因为我们也要在包中创建一个一个的类才能进行注入。当我们想要批量操作bean时,如在mybatis在我们想要批量把dao接口更换为代理类,这样使用单个注入的方式就不合适了,就需要批量对bean进行操作,就要使用spring的扩展点。什么是spring的扩展点?spring容器在启动和初始化过程中会默认执行一些流程,说的直白一些就原创 2021-11-20 17:21:19 · 242 阅读 · 0 评论 -
可能是最卷的Spring源码系列(五):asm扫描
Spring中的扫描对Spring进行配置有三种方式,XML、java config、注解,今天我们只关注基于注解的配置方式。基于注解的扫描就是在xml或者java config类中,指定需要扫描的包名,spring会把包中的所有的类扫描出来,然后根据扫描规则来确定都有哪些类要注册到spring容器当中。不管是基于xml配置还是基于java config配置,最终都会使用Scanner对象进行扫描,同样我们在调用AnnotationConfigApplicationContext.scan()方法时也会原创 2021-08-06 23:12:40 · 1278 阅读 · 0 评论 -
可能是最卷的Spring源码系列(四):BeanDifinition
学习spring源码,BeanDifinition是一个重要的基础。spring把(几乎)所有的要管理的对象都定义为Bean,在对Bean初始化之前,会把对spring配置转换为BeanDifinition对象,把所有的BeanDifinition放入到一个Map中,key为Bean的名字,value为BeanDifinition对象1、Bean先看一下Spring官网中对Bean的描述Bean是通过我们提供给spring的配置文件来创建的,这些文件包括xml文件,注解,java config配置这原创 2021-07-27 23:46:31 · 303 阅读 · 0 评论 -
可能是最卷的Spring源码系列(三):AnnotatedBeanDefinitionReader和ClassPathBeanDefinitionScanner源码分析
上篇文章已经简单介绍了AnnotatedBeanDefinitionReader和ClassPathBeanDefinitionScanner的功能,这篇文章将详细的分析这两个对象在分析这两个类之前再贴一下AnnotationConfigApplicationContext的继承关系可以看到AnnotationConfigApplicationContext有实现一个AnnotationConfigRegistry接口,这个接口里面有两个方法,先说结论register是有AnnotatedBeanD原创 2021-07-25 00:12:27 · 460 阅读 · 0 评论 -
可能是最卷的Spring源码系列(二):ApplicationContext的初始化
本系列对spring源码的分析都基于AnnotationConfigApplicationContext,其它类型的ApplicationContext暂时不会涉及AnnotationConfigApplicationContext的继承关系原创 2021-07-22 23:18:54 · 331 阅读 · 0 评论 -
可能是最卷的Spring源码系列(一):Spring源码环境搭建(idea)
本文是spring源码系列第一篇,计划通过10篇左右文章分析spring主要流程工欲善其事,必先利其器。同样,学习Spring源码,就必须先把Spring的源码环境搭建起来0 下载spring的源码github中搜索spring-framework项目,直接git clone或者下载压缩包1 编译源码根据spring项目的md中编译指南https://github.com/spring-projects/spring-framework/wiki/Build-from-Source1.1 执行原创 2021-07-22 22:01:59 · 575 阅读 · 0 评论