Spring源码分析概览

先上图,了解一下整体流程图:

 最核心的代码就是AbstractApplicationContext当中的refresh方法了:

prepareRefresh:容器刷新前的准备工作:主要是生成Environment并且加载properteis文件

ConfigurableListableBeanFactory beanFactory = obtainFreshBeanFactory():加载xml配置文件,生成DefaultListableBeanFactory,同时加载BeanDefinitions,也就是loadBeanDefinitions(beanFactory);方法,参数beanFactory就是前面生成的DefaultListableBeanFactory,oadBeanDefinitions根据不同的配置方式有不同的加载方式,常用的ClassPathApplicationContext就是调用的org.springframework.context.support.AbstractXmlApplicationContext#loadBeanDefinitions(org.springframework.beans.factory.support.DefaultListableBeanFactory)

prepareBeanFactory(beanFactory):准备beanfactory,主要是添加beanpostprocessor,忽略aware接口,aware接口会在后续流程中统一处理,同时设置上一步创建好的beanfactory的其他属性(比如classloader和el表达式解析器)

postProcessBeanFactory(beanFactory):默认空,BeanFactory 准备工作完成后进行的后置处理工作,交由子类实现,比如有注解驱动的后置处理器,以及web类型的后置处理器(org.springframework.web.context.support.AbstractRefreshableWebApplicationContext#postProcessBeanFactory等)

invokeBeanFactoryPostProcessors(beanFactory):BeanFactory的后置处理器。在BeanFactory标准初始化后执行的,标准初始化就是前面的4步,也可以理解为:调用上下文中注册为bean的工厂处理器。 执行BeanFactoryPostProcessors()

registerBeanPostProcessors(beanFactory):注册bean后置处理器,可以看到不论是beanfactory还是bean在实例化之前都需要先注册后置处理器

initMessageSource:国际化功能:消息解析,消息绑定

initApplicationEventMulticaster:初始化事件监听器

onRefresh:同postProcessBeanFactory方法一样,交由子类实现,在容器刷新的时候可以自定义逻辑

registerListeners:注册事件监听器,并且发布早期事件,也就是注册initApplicationEventMulticaster初始化过的事件监听器

finishBeanFactoryInitialization:这个方法就是最核心的方法了,一个是解析我们自定义的业务配置文件(因为要开始实例化业务bean了,所以提前解析配置文件),比如PropertyPlaceholderConfigurer(它其实实现了BeanFactoryPostProcessor),另一个就是实例化所有剩下的单实例bean,也就是通常我们自定义的业务bean会在这一步进行实例化:org.springframework.context.support.AbstractApplicationContext#finishBeanFactoryInitialization最后一行:beanFactory.preInstantiateSingletons(); 会调用到org.springframework.beans.factory.support.DefaultListableBeanFactory#preInstantiateSingletons这个方法,也就是getBean方法从这里开始,getBean核心方法:org.springframework.beans.factory.support.AbstractBeanFactory#doGetBean,创建bena的核心方法:org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#doCreateBean

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值