写点什么

SpringBoot 的 SpringBootApplication 注解

作者:技术小生
  • 2022 年 7 月 14 日
  • 本文字数:709 字

    阅读完需:约 2 分钟

SpringBoot的SpringBootApplication注解

写在前面

SpringBoot 由于其约定优于配置的设计理念,在众多互联网公司应用广泛。SpringBoot 使得程序员在业务开发过程中不用关心 Spring 原有的复杂配置,直接写一个 @SpringBootApplication 注解,程序就可以直接运行。但是,这些默认配置都是 SpringBoot 内部约定的,并不是适合所有的应用场景。所以,要想用好 SpringBoot 还是得熟练掌握内部原理。


SpringBootApplication 注解剖析

SpringBootApplication 注解标明此为 SpringBoot 项目的启动类,主程序。应用使用该注解后,SpringBoot 应用直接使用 SpringBoot 默认的配置启动应用。该注解是如何实现的呢?

该注解由三个注解组成,分别是 @SpringBootConfiguration + @EnableAutoConfiguration + @ComponentScan

  • @SpringBootConfiguration 实际上就是 @Configuration 的封装,表示该类是配置类。

  • @EnableAutoConfiguration 是 @AutoConfigurationPackage 和 @Import 的组合,表示开启自动配置功能。

  • @AutoConfigurationPackage 功能也是由 @Import 实现的,作用就是将主程序类所在的包及其所有子包下的组件都扫描到 SpringIOC 容器中。

  • @Import({AutoConfigurationImportSelector.class}) 将 AutoConfigurationImportSelector 这个类导入到 Spring 容器中,这个类可以帮助 SpringBoot 应用将所有符合条件的 @Configuration 配置都加载到当前 Spring 的 IOC 容器内。从 classpath 中搜寻 META-INF/spring.factories 配置间,并将对应的配置项中的类以反射形式实例化成 JavaConfig 配置类,加载到 IOC 容器中。

  • @ComponentScan 表示扫描类注册为 Spring Bean。

  • 由于 @ComponentScan 的 basePackage 为空,表示扫描当前包及其所有子包下的类注册为 Spring Bean。所以 SpringBoot 的启动类一般置于项目的最外层,而不是某个包下。

发布于: 刚刚阅读数: 2
用户头像

技术小生

关注

业务应用架构专家 2019.10.08 加入

主要负责公司内部系统的应用架构设计与落地。擅长Java语言开发,熟悉Python、Shell等。精通K8S等云原生相关技术。

评论

发布
暂无评论
SpringBoot的SpringBootApplication注解_springboot_技术小生_InfoQ写作社区