springboot启动过程

Spring Boot的启动过程主要涉及几个核心组件,包括`SpringApplication`、`ApplicationContext`、`BeanDefinition`、`BeanPostProcessor`和`ApplicationRunner`/`CommandLineRunner`。以下是Spring Boot启动的一般步骤:

1. **创建SpringApplication实例**:
   启动Spring Boot应用通常从创建`SpringApplication`对象开始。

   ```java
   public static void main(String[] args) {
       SpringApplication app = new SpringApplication(MySpringBootApplication.class);
       app.run(args);
   }
   ```

2. **运行SpringApplication**:
   调用`run`方法,该方法会初始化Spring的环境、创建并配置`ApplicationContext`。

3. **初始化SpringApplicationRunListeners**:
   在应用上下文刷新之前,Spring Boot会初始化并通知所有的`ApplicationListener`们。

4. **创建并配置Environment**:
   `Environment`用于存储所有的环境属性和命令行参数。

5. **初始化ApplicationContext**:
   创建应用上下文`ApplicationContext`,它是Spring框架的核心,用于容纳和管理所有的Spring组件(Beans)。

6. **注册并加载BeanDefinition**:
   通过`BeanDefinitionReader`读取`@Component`、`@Service`、`@Repository`、`@Controller`等注解的类,并将它们注册为`BeanDefinition`。

7. **BeanFactory的后处理**:
   在实例化Bean之前,调用所有的`BeanFactoryPostProcessor`对BeanFactory进行后处理。

8. **Bean的创建和初始化**:
   使用`BeanFactory`创建Bean实例,然后通过`BeanPostProcessor`对Bean进行后处理,例如@Autowired自动装配。

9. **刷新ApplicationContext**:
   调用`refresh()`方法刷新容器,完成Bean的创建、依赖注入和初始化。

10. **调用所有的ApplicationRunner和CommandLineRunner**:
    在Spring Boot 2.2之后,`ApplicationRunner`和`CommandLineRunner`接口允许你在应用启动后执行一些代码。

11. **注册ShutdownHook**:
    为`ApplicationContext`注册一个关闭钩子,以确保应用可以优雅地关闭。

12. **运行Web服务器**(如果适用):
    如果应用是一个Web应用,Spring Boot会自动配置内嵌的Tomcat、Jetty或Undertow服务器,并启动它。

13. **应用启动完成**:
    所有上述步骤完成后,应用启动完成,可以接收外部请求了。

Spring Boot的自动配置是启动过程中的一个重要特性,它尝试根据添加的依赖和类路径上的库自动配置你的Spring应用。例如,如果检测到`spring-boot-starter-web`依赖,Spring Boot会自动配置Tomcat和Spring MVC。

Spring Boot的启动过程是高度可定制的,你可以通过实现各种`PostProcessor`接口或通过配置`application.properties`或`application.yml`文件来改变启动行为。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值