Spring源码分析系列
文章平均质量分 89
记录的是spring源码分析学习过程
技术路上的苦行僧
不怕别人天赋比你高,就怕别人比你更努力
展开
-
Spring源码解析(24)之JDK动态代理与cglib动态代理源码解析
一、前言 我们知道AOP生成代理对象底层是根据JDK动态代理或者是Cglib动态代理,如果不熟悉代理模式的可以先去看下:设计模式(20)之代理模式_技术路上的苦行僧的博客-CSDN博客,下面直接来分析对应的源码。二、JDK动态代理源码分析下面先来看下我们一般是如何使用JDK动态代理的。/** * @author maoqichuan * @date 2022年03月22日 18:42 */public class CalculatorProxy { public s...原创 2022-03-23 11:30:32 · 829 阅读 · 0 评论 -
Spring源码解析(23)之bean创建流程之look-up标签使用
一、前言在上一篇博客中,说到一个问题,在Spring中如果我们要在一个单例bean中保存一个protype类型的bean,那该怎么操作? 我们知道bean的创建经历过几个比较重要的方法:getBean ->doGetBean ->createBean ->doCreateBean,我们先来看下look-up标签的使用。...原创 2022-03-09 14:39:20 · 312 阅读 · 0 评论 -
Spring源码解析(22)之bean创建流程之FactoryBean
一、前言在上一节我们主要说了Spring在实例化bean前做的一些工作,主要是注册转换器以及属性解析器并且会冻结目前已经注册的BeandDefinition。 protected void finishBeanFactoryInitialization(ConfigurableListableBeanFactory beanFactory) { // 1. 初始化此上下文的转换服务,用来自定义将Spring中的某个Bean的属性从一个类型转换到另外一个类型. // 判...原创 2022-03-02 11:43:43 · 1411 阅读 · 1 评论 -
Spring源码解析(21)之bean创建流程之转换器
一、前言在前面的几节中我们已经介绍完refresh()的其他方法了,接下来就是finishBeanFactoryInitialization方法,初始化所有剩余的单实例Bean(没有使用懒加载的Bean).整个Spring IOC的核心,接下来我们看看这个方法到底做了哪些事情? protected void finishBeanFactoryInitialization(ConfigurableListableBeanFactory beanFactory) { // 1. 初...原创 2022-02-28 15:08:21 · 540 阅读 · 0 评论 -
Spring源码解析(20)之refresh(8)-BeanPostProcessor源码分析
一、前言我们在之前已经介绍完了BeanFactoryPostProcessor和BeanDefinitionRegistryPostProcessor,还介绍了Spring中比价重要的一个类:ConfigurationClassPostProcessor,接下来我们就要看下BeanPostProcessor执行源码分析。那BeanFactoryPostProcessor和BeanPostProcessor到底有什么区别呢?其实主要是作用的对象不同,BeanFactoryPostPro...原创 2022-02-25 20:20:13 · 295 阅读 · 0 评论 -
Spring源码解析(19)之refresh(7)-SpringBoot自动装配原理
一、前言我们这上一节中主要是介绍了ConfigurationClassPostProcessor,有没有细心的人发现,我们@Import注解的解析源码还没有分析,这一节我们来具体分析。还有在面试的时候想必大家都有被问到过SpringBoot的自动装配原理,这里结合@ ConfigurationClassPostProcessor,以SpringBoot自动装配开始分析我们@Import注解是如何解析的,并且说一说SpringBoot的自动装配原理。 首先来看下Spr...原创 2022-02-25 14:30:32 · 652 阅读 · 0 评论 -
Spring源码解析(18)之refresh(6)-ConfigurationPostProcessor源码分析
一、前言我们在上一篇的博客最后有提到了ConfigurationClassPostPorcessor,我们上节博客有说到之前Spring配置文件需要支持注解的时候只要在Spring配置文件中加入:<context:component-scan base-package="com.springframework.configrationclass"></context:component-scan> 在上节也带大家看了这个标签对应的解析类,解...原创 2022-02-24 11:14:39 · 457 阅读 · 0 评论 -
Spring源码解析(17)之refresh(5)-BeanFactoryPostProcessor执行流程源码分析
一、BeanFactoryPostProcessor与BeanDefinitionRegistryPostProcessor的区别 这里我们把BeanDefinitionRegistryPostProcessor简称为:BDRPP,BeanFactoryPostProcessor简称为:BPP,首先BDRPP继承了BPP,所以它不仅有BPP的方法:postProcessBeanFactory并且有自己的方法:postProcessBeanDefinitionRegistry,那他们的区别主...原创 2022-02-22 14:46:39 · 544 阅读 · 0 评论 -
Spring源码解析(16)之refresh(4)-prepareBeanFactory源码分析
一、前言 在这一篇博客中我们主要是介绍prepareBeanFactory方法,bean工厂的初始化准备工作,设置bean工厂的一些属性值,需要忽略哪一些接口,需要注册哪一些bean,需要设置哪一些bean的后置处理器等。接下来我们看具体的源码分析,并且这里我们还看看Spring属性编辑器,以及我们如果去拓展一个属性编辑器。protected void prepareBeanFactory(ConfigurableListableBeanFactory beanFactory) {...原创 2022-02-21 16:23:40 · 529 阅读 · 0 评论 -
Spring源码解析(15)之refresh源码分析(三)配置文件解析
一、前言在前面的博客中我们有介绍到refresh方法中的otainFreshBeanFaction方法,这个方法的作用就是获取bean工厂,在这期间还会完成配置文件的加载,生成BeanDefinition,需要注意的是这里生成的BeanFactory默认的是DefaultListableBeanFactory,需要注意的是,我们自定的一些xsd约束文件也是在这里完成解析,通过实现BeanDefitionParser接口,并且实现parse方法,自定义的标签也通过实现NamespaceHandlerSup原创 2022-02-20 17:21:43 · 470 阅读 · 0 评论 -
Spring源码解析(14)之refresh源码分析(二)
一、前言 在上篇中Spring源码解析(13)之refresh源码分析(一)_jokeMqc的博客-CSDN博客我们已经介绍了ClassPathXmlApplicationContext前两个方法的作用,没有看到我上一篇的文章的可以先去看下上一篇对于ClassPathXmlApplicationContext的介绍。 接下来我们就要对refresh方法的13个方法进行具体的源码分析了...原创 2022-01-04 17:39:06 · 731 阅读 · 0 评论 -
Spring源码解析(13)之refresh源码分析(一)
一、前言在之前我们已经对spring的生命周期、AOP、事物等源码有了大体的分析,其中在对源码分析中大家有看到过refresh方法,Spring容器创建之后,会调用它的refresh方法,refresh的时候会做很多事情:比如完成配置类的解析、各种BeanFactoryPostProcessor和BeanPostProcessor的注册、国际化配置的初始化、web内置容器的构造等等。接下来我们以ClassPathXmlApplicationContext这容器入手看整个refresh方法到底做了哪些原创 2022-01-03 01:50:16 · 793 阅读 · 0 评论 -
Spring源码解析(12)之事务源码分析(下)
接下来我们会分析事务代理对象调用流程,如果还没有看过我spring源码分析上篇的同学,大家最好是先去看下对应创建事务代理对象的流程,然后再来学习事务代理对象的调用流程。一、调用代理对象流程 1.1org.springframework.aop.framework.JdkDynamicAopProxy#invoke @Override public Object invoke(Object proxy, Method method, Object[] args) ...原创 2021-12-13 17:05:17 · 612 阅读 · 1 评论 -
Spring源码解析(11)之事务源码分析(上)
一、事务的概念1.1什么是事务 事务就是逻辑上的一批执行单元,它们要么都执行,要么都不执行。1.2事务的特性(ACID) ACID就是数据库管理系统DBMS中事务所具有的的四个特性。atomicity:原子性,原子性表现为操作不能 被分割,一个事务由一系列数据库操作组成一个完整的逻辑过程,比如银行转账,原账户扣减、新账户增加金额,这两个操作要么都不完成,要么都完成,如果事务出错了,那就回回滚事务; Consistency[一致性]:数据...原创 2021-12-13 15:39:22 · 546 阅读 · 0 评论 -
Spring源码解析(10)之Spring 是如何解决循环依赖的
之前有篇章有介绍过spring是如何解决循环依赖Spring源码解析(7)之循环依赖解决_jokeMqc的博客-CSDN博客的,但是我看了之后感觉说的比较的简单,这里再结合spring的源码,说明spring是如何解决循环依赖的。 一、什么是循环依赖所谓的循环依赖就是A依赖B,B依赖A,或者是A依赖B,B依赖C,C依赖A。 代码实例:getter/setter public class InstanceA { ...原创 2021-11-16 15:26:14 · 632 阅读 · 0 评论 -
Spring源码解析(9)之AOP(下)
在spring AOP源码分析上篇Spring源码解析(8)之AOP(上)_jokeMqc的博客-CSDN博客主要是分析了EnableAspectJAutoProxy注解给我们做了什么事情,然后具体分析了AnnotationAwareAspectJAutoProxyCreator做了什么事情,目前我们分析的源码可以得到,他主要是做了两件事情,第一寻找出所有的增强器,第二创建代理对象。接下来我们来分析代理对象是如何调用目标方法的。 一、背景知识@Enabl...原创 2021-11-16 11:30:46 · 605 阅读 · 0 评论 -
Spring源码解析(8)之AOP(上)
一、什么是AOP 1.1 AOPAOP(Aspect Oriented Programming),即面向切面编程,可以说是OOP(Object Oriented Programming,面向对象编程)的补充和完善,OOP引入封装、继承、多态等概念来建立一种对象层次结构,用于模拟公共行为的一个集合。不过OOP允许开发者定义纵向的关系,但并不适合定义横向的关系,例如日志功能。日志代码往往横向地散布在所有对象层次中,而与它对应的对象的核心功能毫无关系对于其他类型的代码,如安全...原创 2021-11-05 11:47:25 · 252 阅读 · 0 评论 -
Spring源码解析(7)之循环依赖解决
一、前言 在之前的博客中已经介绍到了Spring的bean的实例化过程,但是介绍到doCreateBean并没有详细去介绍,这里会接着去介绍doCreateBean具体做了什么事情,大家如果没有阅读过之前的博客,可以先去了解一下bean的加载过程,在我之前的博客都有具体的介绍。Spring源码解析(5)之bean实例化过程(上)_jokeMqc的博客-CSDN博客 下面是getBean的生命周期草图,大家要理解这张图才能够对Spring是如何解决循环依赖以及有哪些循环依赖...原创 2021-10-19 20:31:07 · 229 阅读 · 0 评论 -
Spring源码解析(6)之bean实例化过程(下)
一、前言 Spring的Bean的实例化过程源码分析太过复杂,为了避免篇章过长,这里分为上下篇来进行分析,大家可以先去阅读上篇Spring源码解析(5)之bean实例化过程(上)_jokeMqc的博客-CSDN博客,然后接着再来阅读这篇。 1.1...原创 2021-10-18 17:15:36 · 624 阅读 · 0 评论 -
Spring源码解析(5)之bean实例化过程(上)
一、前言进过前面的分析,接下来就是对面bean加载的过程,其实bean的加载加载过程远比bean的解析要复杂的很多,下面我们对下面的这行代码后面的作用为切入点。public class MainClass { public static void main(String[] args) { AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(...原创 2021-10-17 20:19:44 · 366 阅读 · 0 评论 -
Spring源码解析(3)之容器前期准备
写了BeanFactoryPostProcessor的博客才发现,需要提前先介绍spring在解析之前做的容器准备,要不然感觉直接介绍解析源码的话,会有一点懵逼,这里会介绍Spring容器前期准备。 这里问题问题:AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(MainConfig.class);这句代码相信很多人都用过并且很熟悉,但是大家有思考过,它为了我们做了...原创 2021-10-11 16:58:45 · 285 阅读 · 0 评论 -
Spring源码解析(4)之BeanFactoryPostProcessor 处理源码流程
一、BeanFactoryPostProcessor处理流程执行时间:所有的Bean定义信息已经加载到容器中,但是Bean实例还没有被初始化 下面我们自己定义一个BeanFactoryPostProcessor,Spring提供了对BeanFactory进行操作的处理器BeanFactoryProcessor,简单来说就是获取容器BeanFactory,这样就可以在真正初始化bean之前对bean做一些处理操作,允许我们在bean工厂里面的所有bean被加载出来但是还有...原创 2021-10-11 15:15:23 · 501 阅读 · 0 评论 -
Spring源码解析(2)之扩展原理ApplicationListener事件发布源码解析
一、Spring是发布事件源码流程1.1)首先我们自己写一个TulingApplicationListener 实现ApplicationListener接口,并且把该组件加入到容器中./** * 创建一个监听器 */@Componentpublic class TulingApplicationListener implements ApplicationListener { @Override public void onApplicationEvent(Applic原创 2021-10-09 16:59:26 · 435 阅读 · 0 评论 -
Spring源码分析(1)之常见底层核心注解
一、Spring框架整体功能介绍1、Spring Core Container:模块作用:Core 和 Beans 模块是框架的基础部分,提供 IoC (转控制)和依赖注入特性。 这里的基础概念是BeanFactory,它提供对 Factory 模式的经典实现来消除对程序性单例模式的需要,并真 正地允许你从程序逻辑中分离出依赖关系和配置.1.1) Core 主要包含 Spring 框架基本的核心工具类, Spring 的其他组件都要用到这个包...原创 2021-09-29 13:55:56 · 731 阅读 · 1 评论