一篇文章看懂 SpringApplication 初始化

SpringApplication 初始化

基于 springboot3.2 和 springframework6.1.4

初始化代码解释

public SpringApplication(ResourceLoader resourceLoader, Class<?>... primarySources) {
   
    this.resourceLoader = resourceLoader;
    Assert.notNull(primarySources, "PrimarySources must not be null");
    this.primarySources = new LinkedHashSet<>(Arrays.asList(primarySources));
    this.webApplicationType = WebApplicationType.deduceFromClasspath();
    this.bootstrapRegistryInitializers = new ArrayList<>(
            getSpringFactoriesInstances(BootstrapRegistryInitializer.class));
    setInitializers((Collection) getSpringFactoriesInstances(ApplicationContextInitializer.class));
    setListeners((Collection) getSpringFactoriesInstances(ApplicationListener.class));
    this.mainApplicationClass = deduceMainApplicationClass();
}

这是来自Spring Boot框架的SpringApplication类的代码片段。该构造函数用于创建SpringApplication的新实例,这是一个关键的类,负责引导和启动Spring应用程序。

让我们分解一下这个构造函数的关键方面:

  1. 资源加载器(Resource Loader)resourceLoader参数表示要由应用程序上下文使用的资源加载器。它有助于从不同来源加载资源。

  2. 主要来源(Primary Sources)primarySources参数表示主要的bean来源。这些类被视为配置Spring应用程序上下文的主要来源。

  3. Web应用程序类型(Web Application Type)webApplicationType是从类路径中推断出来的。它表示Web应用程序的类型(例如,Servlet、Reactive、None)。

  4. 引导注册表初始化器(Bootstrap Registry Initializers)bootstrapRegistryInitializersBootstrapRegistryInitializer实例的列表。它们负责在应用程序引导阶段自定义BootstrapRegistry

  5. 初始化器和监听器(Initializers and Listeners):构造函数通过使用getSpringFactoriesInstances从Spring工厂获取实例来设置初始化器和监听器。

    org.springframework.context.ApplicationContextInitializer=\
    org.springframework.boot.context.ConfigurationWarningsApplicationContextInitializer,\
    org.springframework.boot.context.ContextIdApplicationContextInitializer,\
    org.springframework.boot.context.config.DelegatingApplicationContextInitializer,\
    org.springframework.boot.rsocket.context.RSocketPortInfoApplicationContextInitializer,\
    org.springframework.boot.web.context.ServerPortInfoApplicationContextInitializer
    
    org.springframework.context.ApplicationListener=\
    org.springframework.boot.ClearCachesApplicationListener,\
    org.springframework.boot.builder.ParentContextCloserApplicationListener,\
    org.springframework.boot.context.FileEncodingApplicationListener,\
    org.springframework.boot.context.config.AnsiOutputApplicationListener,\
    org.springframework.boot.context.config.DelegatingApplicationListener,\
    org.springframework.boot.context.logging.LoggingApplicationListener,\
    org.springframework.boot.env.EnvironmentPostProcessorApplicationListener
  1. 主应用程序类(Main Application Class)mainApplicationClass是通过推断得出的,表示应用程序的主类。
  • 44
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值