一.概述 二.prepareRefresh() 三.obtainFreshBeanFactory() 四.prepareBeanFactory(beanFactory); 五.postProcessBeanFactory(beanFactory); 六.invokeBeanFactoryPostProcessors(beanFactory) 七.registerBeanPostProcessors(beanFactory) 八.initMessageSource() 九.initApplicat…
Spring容器的refresh()[创建刷新]; 1.prepareRefresh()刷新前的预处理; 1).initPropertySources()初始化一些属性设置;子类自定义个性化的属性设置方法; 2).getEnvironment().validateRequiredProperties();检验属性的合法等 3).earlyApplicationEvents= new LinkedHashSet();保存容器中的一些早期的事件; 2.obtainFreshBeanFactory()…
1. 前言 最近搭建的工程都是基于SpringBoot,简化配置的感觉真爽.但有个以前的项目还是用SpringMvc写的,看到满满的配置xml文件,却有一种想去深入了解的冲动.折腾了好几天,决心去写这篇关于Spring启动的博客,自己是个刚入职的小白,技术水平有限,也是硬着头皮看源码去Debug,很多不懂的地方还请谅解! 2. 概述 先给出几个让我头皮发麻的概念:web容器,Spring容器,SpringMvc容器 容器就是管理对象的地方,例如web容器就是管理servlet的地方,Spring…
spring源码版本5.0.5 Spring容器创建之后,会调用它的refresh方法刷新Spring应用的上下文. 首先整体查看AbstractApplicationContext#refresh源码 public void refresh() throws BeansException, IllegalStateException { synchronized (this.startupShutdownMonitor) { //刷新前的预处理; prepareRefresh(); //获取B…
spring作为目前我们开发的基础框架,每天的开发工作基本和他形影不离,作为管理bean的最经典.优秀的框架,它的复杂程度往往令人望而却步.不过作为朝夕相处的框架,我们必须得明白一个问题就是spring是如何加载bean的,我们常在开发中使用的注解比如@Component.@AutoWired.@Socpe等注解,Spring是如何解析的,明白这些原理将有助于我们更深刻的理解spring.需要说明一点的是spring的源码非常精密.复杂,限于篇幅的关系,本篇博客不会细致的分析源码,会采取抽丝剥茧…
一.创建BeanFactory流程 1.流程入口 创建BeanFactory的流程是从refresh方法的第二步开始的,通过调用obtainFreshBeanFactory方法完成流程. ConfigurableListableBeanFactory beanFactory = obtainFreshBeanFactory(); 2.流程分析 创建BeanFactory的流程是从第二步开始的,调用AbstractApplicationContext类中的obtainFreshBeanFactor…
Spring容器的refresh()   创建刷新 1  prepareRefresh() 刷新前的预处理 1) initProPertySources() 初始化一些属性设置: 子类定义个性化的属性设置方法 2) getEnvironment( ) .validateRequiredProperties() 检验属性的合法性 3)earlyApplicationEvents = new LinkedHashSet<ApplicationEvent>(); 保存容器中的一些早期的事件 2 ob…
44.[源码]-Spring容器创建-BeanFactory预准备 45.[源码]-Spring容器创建-执行BeanFactoryPostProcessor 46.[源码]-Spring容器创建-注册BeanPostProcessors 47.[源码]-Spring容器创建-初始化MessageSource 48.[源码]-Spring容器创建-初始化事件派发器.监听器等 49.[源码]-Spring容器创建-创建Bean准备 50.[源码]-Spring容器创建-Bean创建完成 51.[源…
Spring容器的refresh()[创建刷新] 1.prepareRefresh()刷新前的预处理 1).initPropertySources()初始化一些属性设置;子类自定义个性化的属性设置方法: 2).getEnvironment().validateRequiredProperties();检验属性的合法等 3).earlyApplicationEvents= new LinkedHashSet<ApplicationEvent>();保存容器中的一些早期的事件: 2.obtainF…
44.[源码]-Spring容器创建-BeanFactory预准备 @Override public void refresh() throws BeansException, IllegalStateException { synchronized (this.startupShutdownMonitor) { // Prepare this context for refreshing. prepareRefresh(); // Tell the subclass to refresh th…