简单分析SpringBoot执行流程

SpringBoot执行流程

 

  1. springboot启动类

该类必须在根目录或者父包(其它组件必须位于此包的子包中)中

必须有@SpringBootApplication注解,该注解说明此类为springboot程序的启动类,是程序的入口,

@SpringBootApplication源码:

@Target({ElementType.TYPE})

@Retention(RetentionPolicy.RUNTIME)

@Documented

@Inherited

@Configuration

@EnableAutoConfiguration

@ComponentScan

public @interface SpringBootApplication {

    Class<?>[] exclude() default {};

    String[] excludeName() default {};

    @AliasFor(annotation = ComponentScan.class,

        attribute = "basePackages")

    String[] scanBasePackages() default {};

    @AliasFor( annotation = ComponentScan.class,

        attribute = "basePackageClasses")

    Class<?>[] scanBasePackageClasses() default {};

}

 

@Configuration:表示将该类作用springboot配置文件类。

@EnableAutoConfiguration:表示程序启动时,自动加载springboot默认的配置。@ComponentScan:表示程序启动是,自动扫描当前包及子包下所有类。

 

从源代码中得知 @SpringBootApplication 被 @Configuration、@EnableAutoConfiguration、 @ComponentScan 注解所修饰,也就是说, Springboot 对这三个注解进行了封装整合,简化程序的配置。

程序启动时,会自动扫描启动类所在包及子包中的带有spring相关注解的组件,

  1. SpringBoot程序启动流程

SpringBoot程序启动时,启动类的main方法是程序的入口,执行

SpringApplication.run(BootApplication.class, args);

第一个参数为启动类的类对象,第二个为String可变参数,通常不写。

 

当程序开始启动时,在启动类中调用SpringApplication的静态run方法,此时会执行以下操作

  1. 首先新建一个SpringApplication对象

在SpingApplication对象的方法执行过程中

  • 获取webApplicationType 类型,当springboot应用打包方式为war包时,该类型 为SERVLET
  • 注入ApplicationContextInitializer初始化器
  • 设置监听器ApplicationListener

       2. 执行对象的run方法,

  • 新建一个StopWatch,并启动用于监测程序运行时间
  • 获取SpringApplicationRunListeners对象,并启动该监听器
  • 根据启动时传入的参数args,新建ApplicationArguments对象
  • 新建ConfigurableEnvironment对象,具体类型为StandardServletEnvironment,在其创建过程中将会加载springboot的配置文件application.properties,同时将其绑定的SpringApplication程序中
  • 创建ConfigurableApplicationContext对象context,并对该对象设置环境属性,遍历ApplicationContextInitializer对该对象进行初始化,
  • 通过context对象获取BeanFactory注册applicationArguments单列
  • 执行context的刷新操作
  •  

   3. 对配置的启动类所在包及子包中的类进行扫描,对于有spring相关注解的类,通过反射为其创建代理对象,并交由spring容器管理

 

  • 5
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值