加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

SpringBoot启动源码分析

(2022-05-03 15:05:42)
分类: JAVA开发
new  SpringApplication()
    initializer   <--  get spring factory instances
    listenner    <--  get spring factory instances

createApplicationContext()

    # ConfigurationClassPostProcessor 注册 internalConfigurationAnnotationProcessor
    this.reader = new AnnotatedBeanDefinitionReader(this);  

    this.scanner = new ClassPathBeanDefinitionScanner(this);

prepareContext()
    
    load()  <-- primary source class


注:

SpringFactoriesLoader   <-- spring.factories  

DefaultListableBeanFactory :: registerBeanDefinition

SingletonBeanRegistry :: registerSingleton  

ConfigurableApplicationContext   environment bean name 定义

AbstractApplicationContext :: prepareBeanFactory   enviroment bean 注册


环境
SpringBoot: 2.5.5
SpringCore: 5.3.10

配置发起点:

"main@1" prio=5 tid=0x1 nid=NA runnable
  java.lang.Thread.State: RUNNABLE
      at org.springframework.context.annotation.ConfigurationClassParser.parse(ConfigurationClassParser.
      at org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.
      at org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.
      at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanDefinitionRegistryPostProcessors(PostProcessorRegistrationDelegate.
      at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.
      at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.
      at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.
      - locked <0xb25> (a
      at org.springframework.boot.SpringApplication.refresh(SpringApplication.
      at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.
      at org.springframework.boot.SpringApplication.run(SpringApplication.
      at org.springframework.boot.SpringApplication.run(SpringApplication.
      at org.springframework.boot.SpringApplication.run(SpringApplication.
      at com.yinyu.demo.DemoApplication.main(DemoApplication.


createApplicationContext =>
  new AnnotationConfigApplicationContext()
    this.reader = new AnnotatedBeanDefinitionReader(this);
    this.scanner = new ClassPathBeanDefinitionScanner(this);

org.springframework.context.annotation.AnnotationConfigApplicationContext.(AnnotationConfigApplicationContext.
  at org.springframework.boot.ApplicationContextFactory.lambda$static$0(ApplicationContextFactory.
  at org.springframework.boot.SpringApplication.createApplicationContext(SpringApplication.
  at org.springframework.boot.SpringApplication.run(SpringApplication.
  at com.yinyu.demo.DemoApplication.main(DemoApplication.

prepareContext

  applyInitializers(context);
  BeanDefinitionLoader  loader.load(); // main app class


如下两个方法完成了Spring的扫描注册功能:
reader.register(Class[?]... annotatedClasses);
scanner.scan(String... basePackages);

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有