springboot

文章目录

SpringApplication构造方法

  • 加载并初始化META-INF/spring.factories,保存到SpringAppliction对象中。
  1. 实例化Bootstrapper
  2. 实例化ApplicationContextInitializer
  3. 实例化ApplicationListener

版本

spring: 5.3.1
spring-boot: 2.4.0

run方法

1. 计时

2. 根据META-INF/spring.factories初始化DefaultBootstrapContext

3. 实例化SpringApplicationRunListener

org.springframework.boot.SpringApplicationRunListener=\
org.springframework.boot.context.event.EventPublishingRunListener

4. 将ApplicationListener全都装入到SpringApplication.listeners

  1. 执行SpringApplicationRunListener.starting()

5. 准备环境,配置

1. 加载常规环境

2. 执行SpringApplicationRunListener.environmentPrepared()

3. load factories EnvironmentPostProcessor.class,

  1. 创建ReflectionEnvironmentPostProcessorsFactory
  2. 对factories中定义的EnvironmentPostProcessor进行初始化
  3. 执行postProcessEnvironment
  4. 添加随机数据源
  5. 替换封装类OriginAwareSystemEnvironmentPropertySource,启动参数,jvm参数,系统环境变量
  6. 解析spring.application.json中的配置
  7. 解析vcap.application属性
  8. 解析配置文件中的配置属性
  9. 响应式调试配置中的属性

4. 根据配置初始化日志系统的配置,注册ShutdownHook

5. 对一些耗时的对象进行提前初始化(可选)

在这里插入图片描述

6.配置spring.beaninfo.ignore

7.打印banner

8. 创建AnnotationConfigServletWebServerApplicationContext

在这里插入图片描述

  • 执行子类构造方法前,先执行父类的构造方法

1. AbstractApplicationContext

	public AbstractApplicationContext() {
   
		this.resourcePatternResolver = getResourcePatternResolver();
	}

2. GenericApplicationContext

	public GenericApplicationContext() {
   
		this.beanFactory = new DefaultListableBeanFactory();
	}
1. 重要,创建beanFactory

在这里插入图片描述

2. AbstractAutowireCapableBeanFactory
  • 添加一些忽略的依赖,默认使用cglib子类初始化策略
	public AbstractAutowireCapableBeanFactory() {
   
		super();
		ignoreDependencyInterface(BeanNameAware.class);
		ignoreDependencyInterface(BeanFactoryAware.class);
		ignoreDependencyInterface(BeanClassLoaderAware.class);
		if (IN_NATIVE_IMAGE) {
   
			this.instantiationStrategy = new SimpleInstantiationStrategy();
		}
		else {
   
			this.instantiationStrategy = new CglibSubclassingInstantiationStrategy();
		}
	}

3. 最后回到当前类AnnotationConfigServletWebServerApplicationContext

	public AnnotationConfigServletWebServerApplicationContext() {
   
		this.reader = new AnnotatedBeanDefinitionReader(this);
		this.scanner = new ClassPathBeanDefinitionScanner(this);
	}

9. 记录applicationcontext启动时的情况

10. 准备context

1. 将springboot准备好的environment覆盖到context中的environment

super.environment = environment;

this
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值