• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

Spring Boot启动原理

武飞扬头像
程序员瓜叔
帮助2

Spring Boot的自动配置为我们提供了快捷方便的方式来运行Spring应用,但很多开发者对其内部启动原理还不是很明白。这篇博客旨在解开Spring Boot的神秘面纱,帮助大家理解它的启动原理。

入口类和注解

我们的Spring Boot应用通常从一个主类开始,这个类包含一个main方法,以及一些注解:


@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

@SpringBootApplication注解和SpringApplication.run方法是启动应用的关键。下面我们来详细解读。

@SpringBootApplication背后的秘密

@SpringBootApplication是一个复合注解,包含了许多其他注解:

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = {
        @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
        @Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) 
})
public @interface SpringBootApplication {
...
}

其中,最重要的三个注解是@Configuration@EnableAutoConfiguration@ComponentScan

@Configuration

@Configuration是JavaConfig的标志,表示这个类是一个配置类。与XML配置相比,JavaConfig提供了一种类型安全的配置方式。

例如,下面的XML配置:

<bean id="mockService" class="..MockServiceImpl">
    ...
</bean>

可以替换为如下的JavaConfig配置:

@Configuration
public class MockConfiguration{
    @Bean
    public MockService mockService(){
        return new MockServiceImpl();
    }
}

@ComponentScan

@ComponentScan注解告诉Spring在哪些地方寻找组件和配置。如果不设置basePackages属性,Spring将从声明@ComponentScan的类所在的包开始扫描。

@EnableAutoConfiguration

@EnableAutoConfiguration注解让Spring Boot根据应用所声明的依赖来对Spring框架进行自动配置。它是通过@Import注解实现的,导入了一个类EnableAutoConfigurationImportSelector,它会读取META-INF/spring.factories文件,获取所有的自动配置类,然后将符合条件的配置类加载到IoC容器中。

启动流程

学新通

  1. 调用SpringApplication.run方法,创建SpringApplication对象。

  2. 调用SpringApplicationrun方法,开始执行真正的启动流程。

  3. 创建ApplicationContext,这是Spring应用的上下文。

  4. 执行ApplicationContextrefresh方法,完成Bean的创建和加载。

  5. 通过@ComponentScan注解,Spring会扫描应用的基础包下以及子包下的所有类,并且在这个过程中识别出Spring的@Component@Service@Controller@Repository等注解,然后将这些类作为Bean定义信息加载到IoC容器中。

  6. 接下来,通过@EnableAutoConfiguration注解,Spring Boot会自动配置应用。这个过程实际上是通过加载spring.factories文件中定义的所有EnableAutoConfiguration类,并检查它们的条件。只有当条件满足时,这些类才会被加载到IoC容器中。

  7. 执行run方法的后续逻辑,包括执行命令行Runner、初始化应用监听器等。

  8. 最后,如果Spring应用成功启动,SpringApplicationrun方法会返回一个ApplicationContext实例。

小结

Spring Boot的启动原理是基于Spring Framework的基础之上,通过提供自动配置和各种Starter的支持,使得Spring应用的构建更加快捷、便捷。尽管Spring Boot做了很多自动化的工作,但了解其启动原理对我们深入理解Spring Boot以及排查问题是非常有益的。希望通过这篇博客,你对Spring Boot的启动原理有了更深入的了解。

参考资料

  1. Spring Boot官方文档
  2. Spring Boot启动原理深入解析
  3. Spring Boot启动过程分析

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhibgfkh
系列文章
更多 icon
同类精品
更多 icon
继续加载