Spring BOOT源码日志

spring context启动入口方法:

org.springframework.boot.SpringApplication#run(java.lang.String...)

//加载环境以及propertie文件等常量

org.springframework.boot.SpringApplication#prepareEnvironment

//创建BeanFactory

org.springframework.boot.SpringApplication#createApplicationContext

//为后续的context中bean的加载初始化一些加载器Bean定义到BeanFactory.

org.springframework.boot.SpringApplication#prepareContext

//装载Bean

org.springframework.boot.SpringApplication#refreshContext

其中分为几个环节:

1)对BeanFactory进行配置

 org.springframework.context.support.AbstractApplicationContext#prepareBeanFactory

2)执行BeanFactory创建后的额外的上下文相关的配置(视具体上下文的定制化逻辑决定,如spring-web,会将BeanFactory引用加入到servletContext中 ),下面是三种context下的例子:

org.springframework.context.support.AbstractApplicationContext#postProcessBeanFactory

org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext#postProcessBeanFactory

org.springframework.web.context.support.GenericWebApplicationContext#postProcessBeanFactory

3)执行前面步骤加入到的BeanFactoryPostProcessor。

org.springframework.context.support.AbstractApplicationContext#invokeBeanFactoryPostProcessors

1.优先执行org.springframework.beans.factory.support.BeanDefinitionRegistryPostProcessor的processor,可以

加载beandefinition到beanFactory.

优先执行的是ConfigurationClassPostProcessor

org.springframework.context.annotation.ConfigurationClassPostProcessor#processConfigBeanDefinitions

可以加载不同定义路径的Bean。

org.springframework.context.annotation.ConfigurationClassParser#parse(java.util.Set<org.springframework.beans.factory.config.BeanDefinitionHolder>)

第一种是根据@SpringBootApplication注解获取相关的bean定义。

@ComponentScan是@SpringBootApplication的别名,所以有SpringBootApplication的注解会自动扫描其项目下的包,根据注解识别是否该创建为bean。

并且还会扫描注解类的所有注解(含注解类的注解),找到该类下所有注解类为org.springframework.context.annotation.Import的value值。

org.springframework.context.annotation.ConfigurationClassParser#collectImports

找到所有import的value中使用的类后进行bean的引入,根据value对应的引入类的不同,进行不同的引入策略

org.springframework.context.annotation.ConfigurationClassParser#processImports

分为三种:

1 org.springframework.context.annotation.ImportSelector

 

使用下方法根据选择器获得使用org.springframework.boot.autoconfigure.EnableAutoConfiguration的配置,再加载bean

org.springframework.boot.autoconfigure.AutoConfigurationImportSelector#getAutoConfigurationEntry

2 org.springframework.context.annotation.ImportBeanDefinitionRegistrar

条件引入bean

3 其他

@Configuration的注解引入


 

 

 

org.springframework.context.support.PostProcessorRegistrationDelegate#invokeBeanDefinitionRegistryPostProcessors

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值