Spring启动流程

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring启动流程相关的知识,希望对你有一定的参考价值。

参考技术A 该方法获取工厂,将bean定义信息注册到beanFactory中。

这个方法作用是根据bean名称判断是否是FactoryBean类型

注:
Spring中存在两类bean,一种是普通bean,可以直接通过xml配置中的class属性利用发射进行实例化,而另一种bean创建逻辑比较复杂,不方便利用配置创建,故可以采用实现FactoryBean< T >接口定制实例化bean的逻辑。我们根据id"xxxFactoryBean"获取到的xxxFactoryBean对象不是对应类的实例(即不是xxxFactoryBean本身),而是它getObject()方法返回的对象,并且返回对象是否是单例,由其中方法isSingleton()来决定。如果要获xxxFactoryBean它本身,需要在id前加上"&".
举例:我们熟悉的有SqlSessionFactoryBean

getBean是创建bean的核心方法

源码中,以do开头命名的方法,意味着是真正处理核心逻辑的方法,即真正干事的方法

使用构造函数实例化对象 (反射的方法实例化对象)。至此,实例化完成,一直往上返回实例,直到回到createBean(),开始进行初始化

至此实例化、初始化完成!

总的来说,bean的创建流程主要如下:
1、创建bean工厂,加载bean定义信息BeanDefination (obtainFreshBeanFactory())
2、实例化 (createBeanInstance())
3、填充属性 (populateBean())
4、初始化前置处理 (applyBeanPostProcessorsBeforeInitialization())
5、初始化 (invokeInitMethods())
7、初始化后置处理 (applyBeanPostProcessorsAfterInitialization())

spring boot启动流程

参考技术A 入口是一个main方法,这个main方法里面new一个SpringApplication对象,传入bean源,就是注解了SpringBootApplication 的那个类,调用run方法。
spring boot启动流程分为两部分 一部分是准备阶段,一部分是运行阶段
准备阶段主要有这么几步:
1、配置bean的源,就是bean的来源,就是注解了SpringBootApplication的那个类。
2、推断,推断应用类型,有webflux,webservlet,none
推断主类,这个是通过线程堆栈实现,构造一个运行时异常,找异常堆栈里面找mian所在的那个类。
3、加载上下文初始化器 在这里可以调整applicationcontext
4、加载应用事件监听器 这两个东西都是在mete-info/spring.factories文件里面。

运行阶段,就是调用run方法
先是加载SpringApplication运行时监听器,SpringApplicationRunListeners,默认只有一个EventPublishingRunListener,需要传入准备阶段加载的listeners,在这个地方调用一个广播器广播事件。
然后会根据推断类型,创建一个ApplicationContext,ConfigurableApplicationContext
对这个context初始化,refresh方法
最后会返回这个context。

自动装配:
1、激活自动配置, EnableAutoConfiguration
2、实现自动配置(注解装配,模式装配,条件装配)配置bean
3、将这个配置配置到spring.factories文件里面去

以上是关于Spring启动流程的主要内容,如果未能解决你的问题,请参考以下文章

Spring启动流程

Spring容器启动流程

activiti自己定义流程之Spring整合activiti-modeler实例:启动流程

spring boot启动流程

spring boot 源码解析 启动流程

Spring Boot的启动流程