随笔分类 -  spring源码分析

1
说明:由于最近一直在看spring的源码,主要参考芋道源码(膜拜大佬),所以打算将自己理解的相关知识点整理出来加深印象。
摘要:前言:我们知道在Spring中经常使用配置文件的形式对进行属性的赋值,那配置文件的值是怎么赋值到属性上的呢,本文将对其进行分析。 首先了解一个类:PropertySourcesPlaceholderConfigurer,该类对程序中使用占位符的方式对属性进行赋值的形式进行解析,如在xml配置文件中进 阅读全文
posted @ 2019-05-08 20:44 developer_chan 阅读(779) 评论(0) 推荐(0)
摘要:前言:在前几篇查漏补缺中,其实我们已经涉及到bean生命周期了,本篇内容进行详细分析。 首先看bean实例化过程: 分析: bean实例化开始后 注入对象属性后(前面IOC初始化十几篇文章)。 检查激活Aware接口。 执行BeanPostProcessor前置处理 实例化bean,这里会检查Ini 阅读全文
posted @ 2019-05-05 16:59 developer_chan 阅读(304) 评论(0) 推荐(0)
摘要:前言:本文分析InitializingBean和init-method方法,其实该知识点在AbstractAutowireCapableBeanFactory#initializeBean方法中有所提及,这里对其进行详细分析。 InitializingBean InitializingBean是一个 阅读全文
posted @ 2019-05-05 14:26 developer_chan 阅读(394) 评论(0) 推荐(0)
摘要:前言:在【spring源码分析】IOC容器初始化(八)中多次提到了前置处理与后置处理,本篇文章针对此问题进行分析。Spring对前置处理或后置处理主要通过BeanPostProcessor进行实现。 BeanPostProcessor的作用:在Bean实例化前后,如果需要对Bean进行一些配置、增加 阅读全文
posted @ 2019-05-05 10:51 developer_chan 阅读(280) 评论(0) 推荐(0)
摘要:前言:在【spring源码分析】IOC容器初始化(十一)中提到了初始化bean的三个步骤: 激活Aware方法。 后置处理器应用(before/after)。 激活自定义的init方法。 这里我们就来看下Spring是如何激活Aware方法的。 Aware是什么 Aware是一个空接口,包路径为:o 阅读全文
posted @ 2019-04-29 21:45 developer_chan 阅读(482) 评论(0) 推荐(0)
摘要:前言:在经过前面十二篇文章的分析,对bean的加载流程大致梳理清楚了。因为内容过多,因此需要进行一个小总结。 经过前面十二篇文章的漫长分析,终于将xml配置文件中的bean,转换成我们实际所需要的真正的bean对象。 总结 【spring源码分析】IOC容器初始化(一):主要分析了Spring是如何 阅读全文
posted @ 2019-04-29 18:11 developer_chan 阅读(756) 评论(0) 推荐(0)
摘要:前言:在doCreateBean方法中还遗留一个问题没有分析:循环依赖。循环依赖在Spring中是非常重要的一个知识点,因此单独进行分析。 什么是循环依赖 循环依赖就是循环引用,两个或两个以上的bean互相引用对方,最终形成一个闭环。如A依赖B,B依赖C,C依赖A。如下图所示: 循环依赖其实就是一个 阅读全文
posted @ 2019-04-29 15:05 developer_chan 阅读(515) 评论(0) 推荐(0)
摘要:前言:前面分析了doCreateBean中的createBeanInstance函数,接下来分析其剩余流程。 首先贴上doCreateBean函数: 分析: 首先判断是否有后置处理器,如果存在在先执行后置处理器(applyMergedBeanDefinitionPostProcessors)。 接下 阅读全文
posted @ 2019-04-28 12:57 developer_chan 阅读(626) 评论(0) 推荐(0)
摘要:前言:前文【spring源码分析】IOC容器初始化(九)中分析了AbstractAutowireCapableBeanFactory#createBeanInstance方法中通过工厂方法创建bean对象的流程,这里接着分析createBeanInstance方法中的剩余流程。 直接看createB 阅读全文
posted @ 2019-04-25 15:52 developer_chan 阅读(584) 评论(0) 推荐(0)
摘要:前言:上篇文章末尾提到createBeanInstance方法中使用工厂方法实例化Bean对象,本文将对该方法进行分析。 AbstractAutowireCapableBeanFactory#instantiateUsingFactoryMethod 可以看到这里是委托给ConstructorRes 阅读全文
posted @ 2019-04-24 16:52 developer_chan 阅读(1128) 评论(0) 推荐(0)
摘要:前言:在上文bean加载过程中还要一个非常重要的方法没有分析createBean,该方法非常重要,因此特意提出来单独分析。 createBean方法定义在AbstractBeanFactory中: 该方法根据给定的beanName、BeanDefinition和args实例化一个bean对象。所有b 阅读全文
posted @ 2019-04-23 20:06 developer_chan 阅读(1044) 评论(0) 推荐(0)
摘要:前言:在【spring源码分析】IOC容器初始化(六)中分析了从单例缓存中加载bean对象,由于篇幅原因其核心函数 FactoryBeanRegistrySupport#getObjectFromFactoryBean并未进行详细分析,本文将继续对bean加载过程的分析。 FactoryBeanRe 阅读全文
posted @ 2019-04-22 16:26 developer_chan 阅读(695) 评论(0) 推荐(0)
摘要:前言:经过前几篇文章的讲解,我们已经得到了BeanDefinition,接下来将分析Bean的加载。 获取Bean的入口:AbstractApplicationContext#getBean 分析:首先检查BeanFactory是否存活,还记得之前分析过的prepareRefresh()方法吗?如果 阅读全文
posted @ 2019-04-22 16:17 developer_chan 阅读(660) 评论(0) 推荐(0)
摘要:前言:前几篇文章已经将BeanDefinition的加载过程大致分析完成,接下来继续分析其他过程。 AbstractApplicationContext#refresh 再次回到refresh函数中,前面已经将preparRefresh和obtainFreshBeanFactory函数进行了分析,特 阅读全文
posted @ 2018-12-25 19:48 developer_chan 阅读(550) 评论(0) 推荐(0)
摘要:前言:在【spring源码分析】IOC容器初始化(三)中已经分析了BeanDefinition注册之前的一些准备工作,下面将进入BeanDefinition注册的核心流程。 前面分析了如何解析bean标签的默认属性,在进行BeanDefinition注册之前,还需对bean标签的相关属性进行处理,第 阅读全文
posted @ 2018-12-10 21:23 developer_chan 阅读(532) 评论(0) 推荐(0)
摘要:前言:在【spring源码分析】IOC容器初始化(二)中已经得到了XML配置文件的Document实例,下面分析bean的注册过程。 XmlBeanDefinitionReader#registerBeanDefinitions(Document doc, Resource resource) 分析 阅读全文
posted @ 2018-12-08 15:13 developer_chan 阅读(547) 评论(0) 推荐(0)
摘要:前言:在【spring源码分析】IOC容器初始化(一)文末中已经提出loadBeanDefinitions(DefaultListableBeanFactory)的重要性,本文将以此为切入点继续分析。 AbstractXmlApplicationContext#loadBeanDefinitions 阅读全文
posted @ 2018-12-05 17:23 developer_chan 阅读(884) 评论(0) 推荐(0)
摘要:前言:spring主要就是对bean进行管理,因此IOC容器的初始化过程非常重要,搞清楚其原理不管在实际生产或面试过程中都十分的有用。在【spring源码分析】准备工作中已经搭建好spring的环境,并利用xml配置形式对类进行了实例化。在test代码中有一个非常关键的类ClassPathXmlAp 阅读全文
posted @ 2018-11-24 22:06 developer_chan 阅读(1647) 评论(0) 推荐(1)
摘要:前言:之前写过两篇基于xml形式的IOC容器初始化过程,现在看来写的比较烂,最近又继续阅读spring源码,对IOC容器的初始化有了一些新的认识,因此决定记录下来,加深自己对spring的印象与理解。 注:笔者fork的spring源码项目地址:https://github.com/morewind 阅读全文
posted @ 2018-11-22 21:53 developer_chan 阅读(881) 评论(0) 推荐(0)
摘要:前言:最近一直在看Spring源码,今天在调试的时候发现一个小问题:在注册bean时,需要初始化spring默认命名空间处理器,具体在DefaultNamespaceHandlerResolver中实现,但是当Debug时,发现handlerMappings已经赋值,顿感奇怪。通过调试发现了该问题产 阅读全文
posted @ 2018-11-22 17:34 developer_chan 阅读(1328) 评论(0) 推荐(1)

1