springboot启动流程简单总结

在这里插入图片描述Spring Boot程序有一个入口,就是main方法。main里面调用SpringApplication.run()启动整个Spring Boot程序,该方法所在类需要使用@SpringBootApplication复合注解。
其中需要关注的是:@SpringBootApplication注解其实是包含了三个注解:(1)@EnableAutoConfiguration:SpringBoot根据应用所声明的依赖来对Spring框架进行自动配置。简单概括一下就是,是借助@Import的帮助,将所有符合自动配置条件的bean定义加载到IoC容器。(2)@Configuration:它就是JavaConfig形式的Spring Ioc容器的配置类。被标注的类等于在spring的XML配置文件中(applicationContext.xml),装配所有bean事务,提供了一个spring的上下文环境。(3)@ComponentScan:组件扫描,可自动发现和装配Bean,功能其实就是自动扫描并加载符合条件的组件或者bean定义,最终将这些bean定义加载到IoC容器中。二:详细解释:1、SpringBoot启动的时候,会构造一个SpringApplication的实例,然后调用这个实例的run方法,在run方法调用之前,也就是构造SpringApplication的时候会进行初始化的工作,初始化的时候会做以下几件事:(1)把参数sources设置到SpringApplication属性中,这个sources可以是任何类型的参数.(2)判断是否是web程序,并设置到webEnvironment的boolean属性中.(3)创建并初始化ApplicationInitializer,设置到initializers属性中 。(4)创建并初始化ApplicationListener,设置到listeners属性中 。(5)初始化主类mainApplicatioClass。源代码:复制代码 private void initialize(Object[] sources) { if (sources != null && sources.length > 0) { //把sources设置到SpringApplication的sources属性中,目前只是一个MyApplication类对象 this.sources.addAll(Arrays.asList(sources)); } //判断是否是web程序,并设置到webEnvironment的boolean属性中 this.webEnvironment = deduceWebEnvironment(); //找出所有的初始化器,默认有5个,设置到initializers属性中 。 setInitializers((Collection) getSpringFactoriesInstances(ApplicationContextInitializer.class)); //找出所有的应用程序监听器,默认有9个,设置到listeners属性中 。 setListeners((Collection) getSpringFactoriesInstances(ApplicationListener.class)); //找出运行的主类(main class) this.mainApplicationClass = deduceMainApplicationClass(); }复制代码2、SpringApplication构造完成之后调用run方法,启动SpringApplication,run方法执行的时候会做以下几件事:(1)构造一个StopWatch计时器,观察SpringApplication的执行 。(2)获取SpringApplicationRunListeners并封装到SpringApplicationRunListeners中启动,用于监听run方法的执行。(3)创建并初始化ApplicationArguments,获取run方法传递的args参数。(4)创建并初始化ConfigurableEnvironment(环境配置)。(5)打印banner(只用在Classpath下添加字符文件图标,就可以在启动时候打印)。(3)构造Spring容器(ApplicationContext)上下文。(4)SpringApplicationRunListeners发布finish事件。(5)StopWatch计时器停止计时。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值